使用Java和SWT更改OS X上的活动应用程序

时间:2014-10-31 19:49:37

标签: java eclipse macos swt

以下是我的具体情况:

我的应用程序在后台运行,我想从应用程序工具栏图标右键菜单中打开一个新窗口。为简单起见,我使用MessageDialog,并在对话框中使用方法open(),窗口应显示并使其自身成为活动窗口。

出于某种原因,我遇到了这样的问题:如果我打开了其他应用程序并尝试打开这个新对话框,它会打开,但在活动应用程序后面。新对话框将在同一应用程序的其他窗口前打开,但不会在其他(活动)应用程序中打开。

有一种简单的方法可以解决这个问题吗?

1 个答案:

答案 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();
}