我基本上是Java FX 2的新手。
场景:
我有3个场景,我想要一种添加菜单栏的方法,这样我就不会了,我不想明确地从上一个场景中删除菜单栏,并将其添加到新的场景中。就像某些东西一样,父场景或某种方式的菜单栏被附加到舞台上。我的意思是菜单栏只添加了一次,无论前面有没有,它都会一直存在。
如果这是可能的,我该怎么做。
以下是JavaFX的Oracle文档提供的默认示例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();
}
}
因此,此处菜单栏被添加到场景中。如果我换一个场景,把另一个场景放在前面。。。我该怎么办?我想我从这个场景中删除菜单栏,然后添加到另一个,或者只是添加到新的。所以每次我换衣服的时候都要这样做。有什么办法可以避免这种情况吗??
我更喜欢的方法是使用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
将始终保持在TOP上,并且您可以在SplitPane
和WebView