如何执行单击主menubutton的任何任务

时间:2015-01-02 17:25:07

标签: javafx javafx-8

我有一个菜单标题,点击显示哪些子菜单项。 set on action功能适用于子菜单项,但不适用于主菜单。我想点击主菜单以及子菜单项的下拉列表来执行一些任务。请帮助。

1 个答案:

答案 0 :(得分:1)

以下是关于如何捕获菜单,子菜单和菜单项的事件的示例:

public class MenuActionDemo extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Menus");
        Group root = new Group();
        Scene scene = new Scene(root, 300, 250, Color.WHITE);

        MenuBar menuBar = new MenuBar();

        // main menu item
        Menu menu = new Menu("Item");
        menu.showingProperty().addListener(new ChangeListener<Boolean>() {
            @Override
            public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {

                if( newValue) {
                    System.out.println( "Main menu item showing");
                } else {
                    System.out.println( "Main menu item closing");
                }

            }
        });

        // sub menu
        Menu subMenu = new Menu("Submenu");
        subMenu.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {

                if( event.getTarget() == subMenu) {
                    System.out.println("Submenu clicked");
                }

            }
        });

        // sub menu item
        MenuItem menuItem = new MenuItem("Submenu Item 1");
        menuItem.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {

                System.out.println("Submenu Item 1 clicked");

            }
        });
        subMenu.getItems().add(menuItem);

        // add items to main menu
        menu.getItems().add(subMenu);

        menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
        menuBar.getMenus().add(menu);

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