2017-08-19 81 views
0

我使用JFace的ApplicationWindow创建了一个简单的窗口,并尝试添加一个菜单栏。JFace ApplicationWindow菜单栏不显示

public MainWindow() { 
    super(null); 
    this.addMenuBar(); // Enable menu-bar. 
} 

@Override 
protected Control createContents(Composite parent) { 
    MenuManager menuBar = this.getMenuBarManager(); 

    // Create "File" menu. 
    MenuManager fileMenu = new MenuManager("&File"); 
    menuBar.add(fileMenu); 

    // Create "File" > "Test" action. 
    Action testAction = new Action("&Test") { 
     @Override 
     public void run() { 
      System.out.println("Test"); 
     } 
    }; 
    fileMenu.add(testAction); 

    // Create contents. 
    Label text = new Label(parent, SWT.NONE); 
    text.setText("Lorem ipsum."); 

    return parent; 
} 

我必须俯视一些简单的东西,因为它看起来不起作用。菜单栏根本不显示。我究竟做错了什么? (请注意,我在Ubuntu中禁用了全局菜单)。

Test Window

注:我已经与GTK 3.16.7和Arch Linux的使用GTK 18年3月22日测试了在Ubuntu 15.10,均与SWT 3.105.3和JFace 3.12.2。

回答

1

createContents中设置菜单栏为时已晚,您需要尽早执行此操作。一种方法是覆盖createMenuManager

@Override 
protected MenuManager createMenuManager() 
{ 
    MenuManager menuBar = new MenuManager(); 

    // Create "File" menu. 
    MenuManager fileMenu = new MenuManager("File"); 
    menuBar.add(fileMenu); 

    // Create "File" > "Test" action. 
    Action testAction = new Action("&Test") 
    { 
    @Override 
    public void run() 
    { 
     System.out.println("Test"); 
    } 
    }; 
    fileMenu.add(testAction); 

    return menuBar; 
} 

@Override 
protected Control createContents(Composite parent) 
{ 
    // Create contents. 
    Label text = new Label(parent, SWT.NONE); 
    text.setText("Lorem ipsum."); 

    return text; 
}