如何在javaFx中实现多个场景的一个菜单栏



我基本上是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();
 }
}

因此,此处菜单栏被添加到场景中。如果我换一个场景,把另一个场景放在前面。。。我该怎么办?我想我从这个场景中删除菜单栏,然后添加到另一个,或者只是添加到新的。所以每次我换衣服的时候都要这样做。有什么办法可以避免这种情况吗??

我更喜欢的方法是使用SceneBorderPane作为其根

scene.setRoot(borderPane);

您可以将MenuBar添加到BorderPane的顶部,并在其Center处放置SplitPane

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

每当您需要切换到WebView时,只需将其替换为SplitPane:

borderPane.setCenter(webView);

按照这种方法,您的MenuBar将始终保持在TOP上,并且您可以在SplitPaneWebView

之间切换

最新更新