我有一个菜单标题,点击显示哪些子菜单项。 set on action功能适用于子菜单项,但不适用于主菜单。我想点击主菜单以及子菜单项的下拉列表来执行一些任务。请帮助。
答案 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();
}
}