Как получить один 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