2014-10-31 70 views
0

這裏是我的具體情況:更改與Java在OS X上活動的應用程序和SWT

我在後臺運行我的應用程序,我想從我的應用工具欄圖標,打開一個新的窗口點擊右鍵菜單。爲了簡單起見,我使用MessageDialog,並在對話框上使用方法open(),窗口應顯示並使其自己成爲活動窗口。

由於某種原因,我遇到了問題,如果我打開其他應用程序,並嘗試打開這個新對話框,它會打開,但在活動應用程序後面。新對話框將在相同應用程序的其他窗口前打開,但不會打開其他(活動)應用程序。

有沒有簡單的方法來做到這一點,我失蹤了?

+0

@ user2494817問題是關於SWT,不AWT/Swing的... – Baz 2014-10-31 20:06:54

+0

@Baz權......這則:http://stackoverflow.com/questions/9722911/java-swt-application-bring- to-front :) – user2494817 2014-10-31 20:08:56

+0

@ user2494817此解決方案專門針對Windows,問題針對Mac OS X專門 – 2014-11-03 14:57:17

回答

0

我能找到解決方案。基本上,您需要找到活動工作臺外殼(應用程序外殼),並在該外殼上使用以下方法,然後將實際所需的窗口推到前面。

您可以輕鬆修改此窗口,使您的窗口最大化,並在重畫之前添加方法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(); 
} 
相關問題