【问题标题】:Change the active application on OS X with Java and SWT使用 Java 和 SWT 更改 OS X 上的活动应用程序
【发布时间】:2014-12-28 05:29:26
【问题描述】:

这是我的具体情况:

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

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

有没有我想念的简单方法来做到这一点?

【问题讨论】:

  • @user2494817 问题是关于 SWT,而不是 AWT/Swing...
  • @Baz Right... 然后:stackoverflow.com/questions/9722911/… :)
  • @user2494817 这个解决方案是专门针对windows的,问题是专门针对Mac OS X的

标签: java eclipse macos swt


【解决方案1】:

我找到了解决方案。本质上,您需要找到您的活动工作台外壳(应用程序外壳)并在该外壳上使用以下方法,然后将实际所需的窗口推到前面。

您可以通过在重绘之前添加方法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();
}

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    相关资源
    最近更新 更多