Java SWT application - Bring To Front

前端 未结 4 1240
小鲜肉
小鲜肉 2021-02-15 03:00

I am currently developing an SWT java application on Windows 7. Usually the application will be minimized, and when there is an event on the serial port the application should m

相关标签:
4条回答
  • 2021-02-15 03:32

    There is a another "hackey" way to do this than what you found, which does not require you to minimize everything else. You actually need to call shell.setMinimized(false) and after that shell.setActive() to restore the previous state of the shell. However, that only works if the shell was truely in the minimized state. So here is my final solution, which artificially minimizes the shell if it was not minimized already. The cost is a quick animation if the minimization has to be done.

    shell.getDisplay().syncExec(new Runnable() {
    
        @Override
        public void run() {
            if (!shell.getMinimized())
            {
                shell.setMinimized(true);
            }
            shell.setMinimized(false);
            shell.setActive();
        }
    });
    
    0 讨论(0)
  • 2021-02-15 03:33

    You need to set the style bit SWT.ON_TOP on your Shell instance. Unfortunately setting style bits is only possible in the constructor.

    But if I understand your use case setting that bit might be viable for you, since you only seem to toggle between minimized and maximized state.

    If that's not possible, simply dispose and re-create your shell and its contents, when you want to toggle between states.

    0 讨论(0)
  • 2021-02-15 03:35

    I found some workaround for the problem, might not be the best solution but works for me. If someone have better solution keep posted. Thanks

    Using the method showDesktop() first simulate windows key + D event to show the desktop

         private void showDesktop()  {  
           try{  
              Robot robot = new Robot();  
              robot.keyPress(KeyEvent.VK_WINDOWS);  
              robot.keyPress(KeyEvent.VK_D);  
              robot.keyRelease(KeyEvent.VK_D);  
              robot.keyRelease(KeyEvent.VK_WINDOWS);  
              }  
            catch(Exception e){e.printStackTrace();}  
         }
    

    Then maximize the shell application

        private void bringToFront(final Shell shell) {
    
             showDesktop(); //minimize all the application
    
             Thread.sleep(5000); // here have to wait for some time, I am not sure why
    
             shell.getDisplay().asyncExec(new Runnable() {
             public void run() {
                 if(!shell.getMaximized()){
                    shell.setMaximized(true);
                 }
                 shell.forceActive();
             }
        });
      }
    
    0 讨论(0)
  • 2021-02-15 03:48

    You need your application to work in full screen mode.

    look at this link How can I create a Java Swing app that covers the Windows Title bar?

    0 讨论(0)
提交回复
热议问题