[英]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();
}
});
}
您需要应用程序以全屏模式工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.