繁体   English   中英

Java SWT应用程序 - 带来前沿

[英]Java SWT application - Bring To Front

我目前正在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演示。 我想让它最大化并带到所有其他应用程序的前面。

谁能帮我?

还有一种“hackey”方法可以做到这一点,而不是你发现的,这并不需要你最小化其他一切。 实际上你需要调用shell.setMinimized(false)并在那个shell.setActive()之后恢复shell的先前状态。 但是,只有在shell真正处于最小化状态时才有效。 所以这是我的最终解决方案,如果它没有最小化,人为地最小化shell 如果必须进行最小化,则成本是快速动画。

shell.getDisplay().syncExec(new Runnable() {

    @Override
    public void run() {
        if (!shell.getMinimized())
        {
            shell.setMinimized(true);
        }
        shell.setMinimized(false);
        shell.setActive();
    }
});

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

但是,如果我理解您的用例设置可能对您有用,那么您似乎只在最小化和最大化状态之间切换。

如果这不可能,只需处理并重新创建shell及其内容,当您想要在状态之间切换时。

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

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

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

查看此链接如何创建涵盖Windows标题栏的Java Swing应用程序?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM