javaFx中的事件处理程序用于菜单

时间:2017-12-29 05:05:15

标签: javafx menu event-handling

我在JavaFX中有一个问题,如何设置菜单(不是菜单栏或菜单项)的事件处理程序,当我点击菜单时会出现一个弹出窗口。我试过这个但是当我点击菜单时没有任何反应:

settingsMenu.addEventHandler(MouseEvent.MOUSE_CLICKED,event -> {//To DO});

甚至以下代码都不起作用:

settingMenu.setOnAction(event -> {//To Do});

1 个答案:

答案 0 :(得分:0)

这是一个黑客。 Menu有一个构造函数Menu(String text, Node graphic)。将String设置为empty-string,将Node设置为Label。然后将MouseListener添加到Label

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 *
 * @author Sedrick
 */
public class JavaFXApplication33 extends Application {

    @Override
    public void start(Stage primaryStage) {
        Label label = new Label("Help!");
        label.setOnMouseClicked(mouseEvent->{System.out.println("Hello World!");});
        Menu menu = new Menu("", label);
        MenuBar menuBar = new MenuBar();
        menuBar.getMenus().add(menu);


        StackPane root = new StackPane();
        root.getChildren().add(menuBar);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}