Как получить один Menubar для более чем одной сцены в javaFx

Я в основном новичок в Java FX 2.

Сценарий:

У меня есть 3 сцены, и я хочу добавить строку меню таким образом, чтобы я не хотел явно удалять строку меню из предыдущей сцены и добавлять ее в новую. Как что-то, Родительская Сцена или каким-то образом строка меню прикреплена к Сцене. Я имею в виду, что строка меню добавляется только один раз и всегда будет присутствовать вне зависимости от того, впереди или нет.

Если это возможно, как я могу это сделать.

Вот пример по умолчанию, предоставленный Oracle Docs из JavaFX http://docs.oracle.com/javafx/2/ui_controls/MenuSample.java.html

public class Main extends Application {
 final ImageView pic = new ImageView();
 final Label name = new Label();
 final Label binName = new Label();
 final Label description = new Label();

 public static void main(String[] args) {
    launch(args);
 }

 @Override
 public void start(Stage stage) {

   stage.setTitle("Menu Sample");
   Scene scene = new Scene(new VBox(), 400, 350);
   scene.setFill(Color.OLDLACE);

   MenuBar menuBar = new MenuBar();

   // --- Graphical elements
    final VBox vbox = new VBox();
    vbox.setAlignment(Pos.CENTER);
    vbox.setSpacing(10);        
    vbox.setPadding(new Insets(0, 10, 0, 10));
    makeContentsForVBox();// in this vBox area will be fill with name pic desrciption
    vbox.getChildren().addAll(name, binName, pic, description); // name is lable


   // --- Menu File
    Menu menuFile = new Menu("File");
    MenuItem add = new MenuItem("Shuffle",
        new ImageView(new Image(getClass().getResourceAsStream("new.png"))));
    add.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent t) {
            shuffle();
            vbox.setVisible(true);
        }
    });

    MenuItem clear = new MenuItem("Clear");
    clear.setAccelerator(KeyCombination.keyCombination("Ctrl+X"));
    clear.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent t) {
            vbox.setVisible(false);
        }
    });

    MenuItem exit = new MenuItem("Exit");
    exit.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent t) {
            System.exit(0);
        }
    });

    menuFile.getItems().addAll(add, clear, new SeparatorMenuItem(), exit);
    ((VBox) scene.getRoot()).getChildren().addAll(menuBar, vbox);

    stage.setScene(scene);
    stage.show();
 }
}

Итак, здесь menuBar добавлен в сцену. если я поменяю сцену и принесу другую сцену впереди... Что я буду делать. я думаю, что удаляю menuBar из этой сцены и добавляю в другую или просто добавляю в новую. так что каждый раз, когда я переодеваюсь, я должен делать это. Есть ли способ избежать этого??

1 ответ

Решение

Я бы предпочел использовать подход Scene с BorderPane как его корень

scene.setRoot(borderPane);

Вы можете добавить MenuBar к вершине BorderPane и в его Center Вы можете разместить SplitPane

BorderPane borderPane = new BorderPane();
borderPane.setTop(menuBar);
borderPane.setCenter(splitPane);

Всякий раз, когда вам нужно переключиться на WebView просто замените его SplitPane:

borderPane.setCenter(webView);

Следуя этому подходу, ваш MenuBar всегда будет оставаться на вершине, и вы можете переключаться между SplitPane а также WebView

Другие вопросы по тегам