Java SWT应用程序 - 带来前沿

时间:2012-03-15 15:29:09

标签: java swt

我目前正在Windows 7上开发一个SWT java应用程序。通常应用程序将被最小化,并且当串行端口上有事件时,应用程序应该最大化自身。以下代码执行最大化部分。

private void bringToFront(final Shell shell) {
    shell.getDisplay().asyncExec(new Runnable() {
        public void run() {
            if(!shell.getMaximized()){
                shell.setMaximized(true);
            }
            shell.forceActive();
        }
    });
}

但有时SWT应用程序在另一个应用程序后最大化。例如,如果我在全屏模式下运行powerpoint,则最大化应用程序将落后于powerpoint演示。我想让它最大化并带到所有其他应用程序前面。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:5)

您需要在SWT.ON_TOP实例上设置样式位Shell。不幸的是,设置样式位只能在构造函数中使用。

但是,如果我理解你的用例设置,那么这个位对你来说是可行的,因为你似乎只是在最小化状态和最大化状态之间切换。

如果无法做到这一点,只需在状态之间切换时,只需处理并重新创建shell及其内容即可。

答案 1 :(得分:3)

我找到了解决问题的方法,可能不是最好的解决方案但对我有用。如果有人有更好的解决方案继续发布感谢

使用方法 showDesktop()首先模拟windows key + D事件以显示桌面

     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();}  
     }

然后最大化shell应用程序

    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();
         }
    });
  }

答案 2 :(得分:-2)

您需要应用程序以全屏模式工作。

看看这个链接 How can I create a Java Swing app that covers the Windows Title bar?