Java SWT应用程序-放在前面
我目前正在Windows7上开发一个SWTJava应用程序。通常,应用程序将最小化,当串行端口上发生事件时,应用程序应将自身最大化。下面的代码执行最大化部分Java SWT应用程序-放在前面,java,swt,Java,Swt,我目前正在Windows7上开发一个SWTJava应用程序。通常,应用程序将最小化,当串行端口上发生事件时,应用程序应将自身最大化。下面的代码执行最大化部分 private void bringToFront(final Shell shell) { shell.getDisplay().asyncExec(new Runnable() { public void run() { if(!shell.getMaximized()){
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演示文稿后面。我想让它最大化,并在所有其他应用程序前面
有人能帮我吗?您需要应用程序在全屏模式下工作 看看这个链接
您需要在
Shell
实例的顶部设置样式位SWT。不幸的是,设置样式位只能在构造函数中进行
但若我理解您的用例设置,那个么这一点对您来说可能是可行的,因为您似乎只在最小化和最大化状态之间切换
如果这是不可能的,当您想要在状态之间切换时,只需处理并重新创建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();
}
});
}
有另一种“黑客”方式可以做到这一点,而不是你所发现的,它不需要你最小化其他一切。实际上,您需要调用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();
}
});
不。forceActive方法将壳移动到Z顺序的顶部。当且仅当没有其他窗口也将其自身移动到Z顺序的顶部时,这将使外壳向前移动。好的,我使用的不是SWING库,而是SWT。我在SWT上尝试了类似的选项,但它并没有达到我的预期。java应用程序在最大化时仍然落后于power point应用程序。