2016-09-14 113 views
0

我正在用Java编写程序,我正在使用JavaFX作为GUI,使用MVC方式使用了 。面板上的JavaFX MenuBar(顶部)闪烁

我谈论视图的结构如下:

View structure

这样做的原因结构,因为我要保持我的代码清洁&清晰。

TopPane里面我只想要一个menuBar。

我已经添加了这个如下:

public class TopPane extends Pane { 
    private MenuBar menuBar; 

    public TopPane() { 
     initNodes(); 
     layoutNodes(); 
    } 

    private void initNodes() { 
     Menu[] menus = new Menu[3]; 
     menus[0] = new Menu("File"); 
     menus[1] = new Menu("Options"); 
     menus[2] = new Menu("Help"); 

     MenuItem[] menuItemsFile = new MenuItem[4]; 
     menuItemsFile[0] = new MenuItem("New game"); 
     menuItemsFile[1] = new MenuItem("Save game"); 
     menuItemsFile[2] = new MenuItem("Load game"); 
     menuItemsFile[3] = new MenuItem("Exit"); 
     menus[0].getItems().addAll(menuItemsFile); 

     MenuItem options = new MenuItem("Options"); 
     menus[1].getItems().add(options); 

     MenuItem help = new MenuItem("Help"); 
     menus[2].getItems().add(help); 

     menuBar = new MenuBar(); 
     menuBar.getMenus().addAll(menus); 
    } 

    private void layoutNodes() { 
     menuBar.setMinWidth(Double.MAX_VALUE); 
     menuBar.useSystemMenuBarProperty().set(true); 
     getChildren().add(menuBar); 
    } 

    public MenuBar getMenuBar() { 
     return menuBar; 
    } 
} 

在gameview我做了以下内容:

public class GameView extends BorderPane { 
    private TopPane topPane; 
    private LeftPane leftPane; 
    private PlayerView playerView; //centerpane 
    private RightPane rightPane; 

    public GameView() { 
     initNodes(); 
     layoutNodes(); 
    } 

    private void initNodes() { 
     topPane = new TopPane(); 
     leftPane = new LeftPane(); 
     playerView = new PlayerView(); 
     rightPane = new RightPane(); 
    } 

    private void layoutNodes() { 
     this.setStyle("-fx-background-color: #2a2a2a"); 

     this.setTop(topPane); 

     Rectangle2D screenBounds = Screen.getPrimary().getVisualBounds(); 
     double screenHeight = screenBounds.getHeight(); 
     int topMargin = 25; 
     if (screenHeight >= 1050) { 
      topMargin = 150; 
     } 
     System.out.println(screenHeight); 

     setMargin(leftPane, new Insets(topMargin, 0, 0, 50)); 
     this.setLeft(leftPane); 

     setMargin(playerView, new Insets(0, 0, 0, 25)); 
     this.setCenter(playerView); 

     this.setRight(rightPane); 
    } 
} 

它显示菜单栏成功地但问题是,当我点击菜单中的一个,menuItems立即闪烁并消失。我认为这是因为我使用Pane扩展了topPane。但是如果没有它显然不能工作,并且如果我从menuBar(并删除变量Menubar)扩展,我的右边PlayerPlayer &将不会被添加到我的GameView的一些神秘的黑暗的原因,我无法弄清楚(还): )

有人能帮助我吗? 在此先感谢!

+1

删除此行:'menuBar.setMinWidth(Double.MAX_VALUE);'并扩展'StackPane'而不是'Pane',那么一切将按预期工作。 – DVarga

+0

虽然简单,但你必须知道它;)非常感谢你! – JC97

回答

0

由于DVarga:

  • 删除menuBar.setMinWidth(Double.MAX_VALUE);
  • 扩展StackPane代替窗格

这工作完全!