【问题标题】:JavaFX MenuItem, handling the eventJavaFX MenuItem,处理事件
【发布时间】:2021-01-03 19:01:03
【问题描述】:

我正在开发一个小型应用程序,但在创建菜单栏时遇到了问题。 这是我的启动方法:

public void start(@SuppressWarnings("exports") Stage prymaryStage) throws Exception {
        // Stats menu
        Menu statsMenu = new Menu("Stats");

        // PairName menu
        Menu pairNameMenu = new Menu("Choose pair");

        // Stats Menu items
        MenuItem gStats = new MenuItem("General stats");

        // Pair list
        ArrayList<String> pairNameList = DatabaseMethods.returnPairNameList();

        // PairName items (probably i will have to change)
        for (String item : pairNameList) {
            pairNameMenu.getItems().add(new MenuItem(item));
        }

        statsMenu.getItems().addAll(gStats, pairNameMenu);

        // Main menu bar
        MenuBar menuBar = new MenuBar();
        menuBar.getMenus().addAll(statsMenu);

        // BorderPane settings
        BorderPane borderPane = new BorderPane();
        borderPane.setTop(menuBar);

        Scene scene = new Scene(borderPane, 1200, 800);

        prymaryStage.setTitle("English minimal pair training");
        prymaryStage.setScene(scene);
        prymaryStage.show();

    }

我的问题出在这部分代码中:

        ArrayList<String> pairNameList = DatabaseMethods.returnPairNameList();

        // PairName items (probably i will have to change)
        for (String item : pairNameList) {
            pairNameMenu.getItems().add(new MenuItem(item));
        }

我试图从 ArrayList 创建子菜单的项目。该数据从数据库中获取,并以 ArrayList 的形式返回。除了 pairNameMenu.getItems().add(new MenuItem(item)); 之外,我没有找到任何其他方法来执行菜单项。在 for 循环中。

现在我想处理项目中的点击,但我不知道该怎么做。我试过 .setOnAction 但 Eclipse 说 .add(new MenuItem(item)) 在这种情况下不能使用并推荐 .addAll 并且同样的情况发生了,Eclipse 说这是一个错误并推荐 .add 我尝试在 new MenuItem(item) 之后添加此代码

.addEventHandler(new EventHandler<ActionEvent>() {
 public void handle(ActionEvent even) {
}
})

但它也不起作用。

我对 Java 和 JavaFX 很陌生,这是我的第一个项目,如果这是一个非常基本的问题,非常抱歉。

感谢您的宝贵时间

【问题讨论】:

    标签: javafx javafx-11


    【解决方案1】:

    在您创建并添加所有项目到pairNameMenu 后,您必须循环遍历pairNameMenu 项目:

    pairNameMenu.getItems().foreach((item) ->{
        item.addEventHandler.....
        ....
        ....
    });
    

    或在创建MenuItems 时执行以下操作:

    for (String item : pairNameList) {
        MenuItem tempMenuItem = new MenuItem(item);
        tempMenuItem..addEventHandler.....
        ....
        ....
        pairNameMenu.getItems().add(tempMenuItem);
    }
    

    【讨论】:

    • 您好,我正在使用此代码,但看不到系统,是我做错了什么吗?pairNameMenu.getItems().forEach((item) -> { item. addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler() { @Override public void handle(MouseEvent event) { System.out.println(item); } }); });
    • 终于成功了,谢谢! pairNameMenu.getItems().forEach((item) -> { item.setOnAction(e -> System.out.println(item.getText())); });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多