当你添加一个基本的ToggleButton时,它自动能够通过空格键选择或不通过空格键(如果可以通过,我将其关闭)或鼠标单击而无需自己编写任何代码。是否有一个简单的方法来关闭它?
我当前的解决方法是有效的是我在ToggleButton上创建一个名为.setOnMouseClicked(this :: handleMouseClick)的事件的方法,并且在该处理程序中我调用setSelected(false)...但是我想调用另一种方法取而代之的是setSelected(false),但它不起作用,ToggleButton仍然被选中,我觉得很奇怪。
我尝试搜索有类似问题的人,但我发现可能相关的唯一事情是在父窗格上创建一个EventFilter并以某种方式捕获自动事件以防止它们被触发?不知道它是如何工作的。非常感谢任何帮助。
答案 0 :(得分:1)
有多种方法可以解决这个问题:
on 1。)
This page解释了有关如何处理和传递事件的所有信息。在处理程序中使用consume()
将停止事件派发链,但不会阻止事件传递给同一节点的处理程序(在您的示例中为ToggleButton)。为此,您需要事件过滤器:
toggleButton.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
event.consume();
});
toggleButton.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if ( event.getCode() == KeyCode.SPACE ) {
event.consume();
}
});
on 2。)
这是ToggleButton的fire()
方法的实现方式:
@Override public void fire() {
// TODO (aruiz): if (!isReadOnly(isSelected()) {
if (!isDisabled()) {
setSelected(!isSelected());
fireEvent(new ActionEvent());
}
}
如果没有禁用节点(ToggleButton),您可以看到它切换setSelected状态。您可以扩展ToggleButton并覆盖此fire方法以阻止这种情况发生。 :)