当前位置: 首页 > 知识库问答 >
问题:

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

齐博厚
2023-03-14

我基本上是Java FX 2的新手。

场景:

我有3个场景,我想要一种添加菜单栏的方法,这样我就不想显式地从以前的场景中删除菜单栏并将其添加到新的场景中。例如,父场景或菜单栏以某种方式附加到舞台。我的意思是菜单栏只添加了一次,无论前面有没有场景,它都会一直出现。

如果这是可能的,我该怎么做?

以下是 Oracle 文档提供的 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();
 }
}

所以这里菜单栏被添加到一个场景中。如果我交换场景,把另一个场景放在前面...我该怎么办。我想我把菜单栏从这个场景中移除,并添加到其他场景中,或者简单地添加到新的场景中。所以每次换衣服的时候都要这样。有什么办法可以避免这种情况??

共有1个答案

卓俊晖
2023-03-14

我更喜欢的方法是使用< code>Scene和< code>BorderPane作为它的根

scene.setRoot(borderPane);

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

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

每当您需要切换到 Web 视图时,只需将其替换为拆分窗格

borderPane.setCenter(webView);

按照这种方法,您的< code >菜单栏将始终保持在顶部,您可以在< code >拆分窗格和< code>WebView之间切换

 类似资料:
  • 我是JavaFX的新手,我想知道如何支持多种语言字体(即中文、英文、印地语等)。 当前,当我将文本字段设置为使用支持css中拉丁字符的字体家族时,来自其他语言的字符将无法正确呈现。 这是我的CSS: 我意识到JavaFX css不允许为字体堆栈和后退字体使用逗号分隔字体,如下所示: 有没有另外一种支持多种语言打字的方法?我的项目要求用户以多种语言输入文本,我需要确保字体嵌入到.jar中,这样每个用

  • 目前,我们使用Apache Ignite.NET瘦客户机缓存不同的数据集。对于每个数据请求,我们使用通过IIgniteClient.createCache ()方法创建的单独缓存。一个缓存包含一组具有相同属性的Enities,在过期后应独立于其他缓存删除。 问题是,在生产中,我们希望有许多应用程序(环境)实例与一个Apache Ignite实例一起工作。每个应用程序实例都应该能够使用与其他应用程序

  • 感谢阅读。我试图用css编辑一个菜单栏,但是菜单项没有改变。 我意识到菜单栏的部分是:菜单栏,菜单,菜单项,但最后一个不能正常工作。帮助 我正在使用场景生成器。

  • 问题内容: 如何在FXML文档中为视图提供不同的语言以支持许多国家? 问题答案: 用小号来存储区域设置相关的文本,并使用访问包中的数据。 具体来说,为您要支持的每种语言创建文本文件,并将其放在类路径中。该对的Javadoc对命名方案的细节,但你应该有一个默认包通过定义和捆绑其他语言和变形的定义。例如(目录位于类路径的根目录中): 资源/UIResources.properties: 资源/UIRe

  • 我们正在尝试实施 SSO,使用 OneLogin 作为 IdP 和我们的思科呼叫管理器集群,对集群中的所有服务器使用单个协议。 这基本上意味着我们的元数据文件为集群中的每台服务器都包含一个单独的AssertOnConsumerService标记。 但是,我们遇到了一个问题,即在SAML响应中,目的地未被识别为有效。 我的问题是,在使用多个AC的情况下,SAML响应中的destination字段应该

  • 在我的阶段,我像往常一样在程序的顶部插入了一个菜单栏。我想在stage中的另一个上下文中为ALT键(连同箭头键)提供一些逻辑。但每次按下ALT和箭头时,我也会无意中浏览菜单栏的菜单。 我想避免这种情况,或者更好地完全禁用这种助记行为。将所有菜单的助记词解析属性设置为false失败了。我也尝试了这种方法,但没有成功: