2008-10-27 26 views
0

我正在使用Eclipse 3.4.1的庫開發SWT/JFace應用程序。 我在Windows(Vista 32位)和Ubuntu 8.10 32位上遇到以下問題:菜單項加速鍵僅在菜單項顯示後才起作用

我在JFace ApplicationWindow的createMenuManager方法中創建了一個菜單欄。我添加MenuManagers文件,編輯和幫助。

我再添加一個ExitAction到文件MenuManager像這樣:

filemenu.add(new ExitAction(this)); 

的ExitAction這樣定義:

public class ExitAction extends Action { 
    final ApplicationWindow window; 

    public ExitAction(ApplicationWindow w) { 

    this.window = w; 
    setText("E&xit"); 
    setToolTipText("Exit the application"); 
    setAccelerator(SWT.MOD1 + 'Q');  
    } 
} 

現在,當我的應用程序啓動我希望能同時按下「CTRL + Q「退出應用程序。然而,這不起作用。只有在點擊菜單欄中的「文件」然後單擊「CTRL + Q」後,應用程序纔會退出。

我試過這與不同的加速器 - 相同的行爲。

但是,如果我創建一個「MenuItem」而不是「Action」來爲菜單欄作出貢獻,它確實有效。

這是SWT錯誤還是我錯過了什麼?

Torsten。

回答

1

更新:我的重複錯誤也包含一個解決方法。 的錯誤網址是:https://bugs.eclipse.org/bugs/show_bug.cgi?id=243758

基本上解決辦法是呼籲ApplicationWindow然後getMenuBarManager().updateAll(true);這將迫使所有菜單項即可初始化create()

當然,您必須在創建菜單項後調用上述方法。

0

AFAIK setAccelerator(.)除了在您的MenuItem上添加適當的文字外沒有別的。您有責任註冊KeyUp事件並對其做出反應。

您可以使用Display.addFilter(SWT.KeyUp, myListener)獨立於您的小部件註冊您的Listener