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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaFx中的事件处理程序用于菜单相关的知识,希望对你有一定的参考价值。

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

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

甚至下面的代码都不起作用:

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

这是一个黑客。 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);
    }

}

以上是关于javaFx中的事件处理程序用于菜单的主要内容,如果未能解决你的问题,请参考以下文章

如何向JavaFX选项卡添加多个选项卡关闭事件处理程序?

JavaFX窗口拖动

JavaFX UI 在事件侦听器中的 JavaFX 应用程序线程中冻结,但可与 Platform.runLater 一起使用

javafx事件处理程序返回错误,我不完全了解

JavaFX 2.1 中的应用程序范围的菜单栏?

使用 JavaFX 在任何地方处理鼠标事件