以下是我的具体情况:
我的应用程序在后台运行,我想从应用程序工具栏图标右键菜单中打开一个新窗口。为简单起见,我使用MessageDialog
,并在对话框中使用方法open()
,窗口应显示并使其自身成为活动窗口。
出于某种原因,我遇到了这样的问题:如果我打开了其他应用程序并尝试打开这个新对话框,它会打开,但在活动应用程序后面。新对话框将在同一应用程序的其他窗口前打开,但不会在其他(活动)应用程序中打开。
有一种简单的方法可以解决这个问题吗?
答案 0 :(得分:0)
我能够找到解决方案。基本上,您需要找到活动的工作台shell(应用程序shell)并在该shell上使用以下方法,然后将实际所需的窗口推到前面。
您可以轻松修改此选项,以便在重绘之前添加方法shell.setMaximized(true)
,使窗口显示最大化。
private static void bringupDialog(WindowState state) {
final Shell workbenchShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
//bring up the application to front
workbenchShell.setVisible( true );
workbenchShell.setMinimized( false );
workbenchShell.redraw();
//focus on dialog
workbenchShell.setActive();
workbenchShell.forceActive();
workbenchShell.setFocus();
workbenchShell.forceFocus();
workbenchShell.moveAbove( null );
workbenchShell.redraw();
Shell shell = instance.getShell(); // desired window shell
shell.setActive();
shell.forceActive();
shell.setFocus();
shell.forceFocus();
shell.moveAbove( null );
shell.redraw();
}