【发布时间】: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() 工作正常;)
-
我已经编辑了我的问题。如果你愿意,你可以发布一个答案,我会接受。