0
我正在用Java編寫程序,我正在使用JavaFX作爲GUI,使用MVC方式使用了 。面板上的JavaFX MenuBar(頂部)閃爍
我談論視圖的結構如下:
這樣做的原因結構,因爲我要保持我的代碼清潔&清晰。
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的一些神祕的黑暗的原因,我無法弄清楚(還): )
有人能幫助我嗎? 在此先感謝!
刪除此行:'menuBar.setMinWidth(Double.MAX_VALUE);'並擴展'StackPane'而不是'Pane',那麼一切將按預期工作。 – DVarga
雖然簡單,但你必須知道它;)非常感謝你! – JC97