java - 如何在javafx中设置带有子窗口的菜单栏?

标签 java javafx menubar childwindow

as the menu bar is coming in the middle

       vbox2.setPadding(new Insets(3));
        vbox2.setSpacing(3);
         vbox2.getChildren().addAll( browser1,browser);

        HBox.setHgrow(vbox2, Priority.ALWAYS);


        hbox.setPadding(new Insets(20));
//        StackPane.setMargin(hbox, new Insets(20));
        hbox.getChildren().addAll(vbox, vbox2);
        root.getChildren().add(hbox);
        Scene scene = new Scene(root, 500, 300); // the stack pane is the root node
        //scene.setCursor(Cursor.CROSSHAIR);
           MenuBar menuBar = new MenuBar();
             Menu menu = new Menu("Window");
        menu.getItems().add(new MenuItem("browser"));
        menu.getItems().add(new MenuItem("img"));
        menuBar.getMenus().add(menu); 
         menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
    BorderPane borderPane = new BorderPane();

        borderPane.prefHeightProperty().bind(scene.heightProperty());
        borderPane.prefWidthProperty().bind(scene.widthProperty());

        borderPane.setTop(menuBar);
           root.getChildren().add(borderPane);
        primaryStage.setScene(scene);
        primaryStage.show(); 
    }

这是代码部分,我正在添加带有边框 Pane 的菜单栏,但它挂起了我的应用程序,因为我无法登录或执行任何操作,并且我还必须添加子窗口以供附加图像时引用

image after adding borderpane with menu bar

最佳答案

这是一个非常基本且最小的示例,通过 MenuItem 处理 BorderPane 中心的 View :

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            // create the menu bar with a menu and its items
            MenuBar menuBar = new MenuBar();
            Menu mainMenu = new Menu("Window");
            MenuItem browserItem = new MenuItem("browser");
            MenuItem imageItem = new MenuItem("image");
            MenuItem closeItem = new MenuItem("exit");
            // create some different contents for the center of the border pane
            Label imagePlaceHolder = new Label("IMAGE TO BE SHOWN");
            WebView browser = new WebView();
            WebEngine browserEngine = browser.getEngine();

            // set the actions for the different items
            closeItem.setOnAction(action -> {
                System.exit(0);
            });

            imageItem.setOnAction(action -> {
                root.setCenter(imagePlaceHolder);
            });

            browserItem.setOnAction(action -> {
                root.setCenter(browser);
                browserEngine.load("http://www.google.com");
            });

            // add items to the menu, then the menu to the menu bar
            mainMenu.getItems().addAll(closeItem, browserItem, imageItem);
            menuBar.getMenus().add(mainMenu);

            // set the scene
            Scene scene = new Scene(root,400,400);
            root.setTop(menuBar);
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

希望对您有帮助...

编辑 我刚刚看到您的最新编辑...如果您确实需要不同的窗口(场景或阶段),该方法将变得更加复杂。读者必须获得有关不同窗口的更多信息(例如如何创建它们、处理它们的内容等等)。

关于java - 如何在javafx中设置带有子窗口的菜单栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46680572/

相关文章:

java - 获取错误 : PKIX path building failed: unable to find valid certification path to requested target

JavaFX隐藏id列

java - 如何动态更改警报文本?

java - 使用表单条目填充电子邮件 Eclipse Android

java - 使用 H2 和 Oracle 的 Spring Boot

java - JavaFx 中的 Jgraph

html - 如何在 CSS 中制作高度不断变化的固定顶部菜单栏?

jquery - toggleClass 不会删除 'showing' 的类

javascript - 使用javascript移动菜单栏

java - Spring 工具套件 - NoClassDefFoundError MappingJackson2XmlHttpMessageConverter