gpt4 book ai didi

java - 如何在javaFx中实现一个菜单栏用于多个场景

转载 作者:行者123 更新时间:2023-12-02 13:00:21 25 4
gpt4 key购买 nike

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

所以这里menuBar被添加到场景中。如果我交换场景并将另一个场景放在前面......我会做什么。我想我从这个场景中删除了 menuBar 并添加到其他场景或只是添加到新场景。所以每次我改变的时候都必须这样做。有什么办法可以避免这种情况吗?

最佳答案

我更喜欢的方法是使用以 BorderPane 作为根的 Scene

scene.setRoot(borderPane);

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

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

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

borderPane.setCenter(webView);

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

关于java - 如何在javaFx中实现一个菜单栏用于多个场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25543015/

25 4 0