2016-09-14 83 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代替窗格

這工作完全!