我目前正在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演示。我想让它最大化并带到所有其他应用程序前面。
任何人都可以帮助我吗?
答案 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?