【问题标题】:JavaFX Menu Item name [closed]JavaFX 菜单项名称 [关闭]
【发布时间】:2021-01-08 16:29:38
【问题描述】:

我上网查了一下,没找到。当有人单击它时,如何获取单击的菜单项的名称。我想根据单击的菜单项更改场景,但我不想创建 8 种不同的方法。如果我可以获取单击的菜单项的名称,我可以创建 1 个方法,将该名称作为参数并启动 FXML 加载器并更改场景

【问题讨论】:

  • 完成有关如何使用菜单/项目的教程(应该让您知道如何做),将您学到的知识应用到您的上下文中,当卡住时返回 minimal reproducible example 演示什么没有按预期工作:)

标签: java user-interface javafx


【解决方案1】:

在初始化方法中为 MenuItem(s) onAction 事件注册一个内联监听器。

for (MenuItem item : menu.items()) {
item.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        processCategory(item.getText()); // this would do your thing you want to do.
        event.consume();
    });

}

【讨论】:

  • 答案还可以,评论完全错误:总是在 fx 线程上通知事件处理程序
  • 是的,我可能一直在考虑 ListChangeEvents ;) 我已经有一年没接触 Javafx了。
【解决方案2】:

这里提到:https://www.programcreek.com/java-api-examples/?class=javafx.scene.input.MouseEvent&method=getSource

你可以这样做:

private void handleLabel(MouseEvent event) { 
    Node label = (Node) event.getSource();
    System.out.println("Mouse click on label: " + label.getId());
}

【讨论】:

  • hmm .. 你如何将它应用到 menuItem?
  • 需要在 Actionable 组件上使用 ActionListener。
  • 喜欢这里:stackoverflow.com/a/40758244/10802597 我相信有某种 setOnMouseClickListener 或类似的东西
猜你喜欢
  • 2015-07-13
  • 2014-07-09
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
相关资源
最近更新 更多