【问题标题】:JavaFx call event handler from nodeJavaFx 从节点调用事件处理程序
【发布时间】:2015-05-27 09:24:18
【问题描述】:

我正在尝试为 javaFx 中的特殊需求创建一个自定义快捷方式系统。

这种特殊需要导致无法使用 KeyCombinaison(不能接受只有一个键 + 修饰符的限制)。

我已经做了正确的 KeyCombinaison 系统,现在我想从节点调用一个处理程序(我在控制器之外)。但我找不到任何优雅的解决方案来执行此操作。

有按钮声明:

<ToggleButton fx:id="selective1Button"
    text="Sélectif 1"
    onMousePressed="#handleSelective1ButtonPressAction"
    onMouseReleased="#handleSelective1ButtonReleaseAction"/>

在我想从我的快捷方式代码中调用我的控制器的操作之后。

public class Shortcut() {

    public void test() {
        ToggleButton button = (ToggleButton) scene.lookup("#selective1Button");
        // How to call #handleSelective1ButtonPressAction from here ? 
    }
}

还有一个标准控制器。

public class MyController {

    // ....
    @FXML
    private ToggleButton selective1Button;

    @FXML
    public void handleSelective1ButtonPressAction() {
        selective1Button.setSelected(true);
    }
}

我可以做一些工作,例如通过使用 java.Robot 并模拟一些点击,但这并不是很漂亮。

他们还有其他方式吗?

谢谢

【问题讨论】:

  • 我很不清楚你在问什么。也许您想使用mnemonic or an accelerator?您可能想解释一下您的特殊需求是什么以及您想要完成什么。通过 id 查找按钮很奇怪 - 它有一个 fx:id,因此您已经在代码中引用了该按钮。切换按钮按下和释放时的处理程序。
  • 我有特殊的项目需要的特殊助记符。我扩展了 KeyCombinaison。现在我搜索一种从节点调用处理程序的方法(我在控制器之外)。
  • 看起来加速器仍然是适合您的解决方案。我之前的评论被删了,但我想知道为什么你有鼠标按下和释放的处理程序——这对于按钮来说是很不寻常的。
  • 加速器需要 KeyCombinaison,但我不能使用 KeyCombinaison。因为我需要绕过特殊项目需要的只有一个键 + 修饰符的限制。但是你有权利,使用鼠标按下和释放会造成麻烦。我已经更改为 onAction,现在 button.fire() 工作正常;)
  • 我已经编辑了我的问题。如果你愿意,你可以发布一个答案,我会接受。

标签: javafx javafx-8 fxml


【解决方案1】:

我的问题是我想调用鼠标事件。这可以使用 Robot 类存档:Example of usage of Robot

但是,可以使用标准动作并通过调用方法 fire() 将它们与按钮链接:

public void test() {
        ToggleButton button = (ToggleButton) scene.lookup("#selective1Button");
        button.fire();
    }

正如jewelsea 所说,使用mousePressed 和mouseRelease 不是很标准。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多