javafx - 选中复选框时触发JAVAFX事件

标签 javafx

我的JavaFx FXML应用程序有问题。

当我在表单上选择一个复选框时,我想基于所单击的复选框执行一种方法。有什么方法可以将复选框的名称传递给方法,以便可以对其执行一些有条件的工作?

我有两个复选框,只能选择一个。当我单击一个时,应取消选择另一个,反之亦然。显然,以下代码无法正常工作,因此我希望传递被单击的对象的名称。

任何帮助,将不胜感激,
非常感谢。

@FXML private void updateRcs(){

    if (chkRcsuri.isSelected()){
        chkRcsuri2.setSelected(false);
    }

    if (chkRcsuri2.isSelected()){
        chkRcsuri.setSelected(false);
    }

}

最佳答案

您可以使用更改跟踪或使用JavaFX的事件处理机制。
有了这样的复选框,

final CheckBox chk1 = new CheckBox("chk 1");
final CheckBox chk2 = new CheckBox("chk 2");


变更追踪

chk1.selectedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        chk2.setSelected(!newValue);
    }
});

chk2.selectedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        chk1.setSelected(!newValue);
    }
});


使用事件处理

EventHandler eh = new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        if (event.getSource() instanceof CheckBox) {
            CheckBox chk = (CheckBox) event.getSource();
            System.out.println("Action performed on checkbox " + chk.getText());
            if ("chk 1".equals(chk.getText())) {
                chk2.setSelected(!chk1.isSelected());
            } else if ("chk 2".equals(chk.getText())) {
                chk1.setSelected(!chk2.isSelected());
            }
        }
    }
};

chk1.setOnAction(eh);
chk2.setOnAction(eh);

关于javafx - 选中复选框时触发JAVAFX事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13726824/

相关文章:

java - 机器人和按键

java - Eclipse/Java : adding a . css 文件到默认包

java - 如何从 Controller 类打开 JavaFX FileChooser?

java - 如何检测双击 JavaFx 中的 TextFieldTableCell?

JavaFX 滚动面板样式

java - javafx-fxml 中不同类的持续标签更新

JavaFX - 如何从 AnchorPane 中删除特定节点

java - 使用 JavaFX 创建托盘图标

JAVAFX:有什么办法可以获得已经开放的舞台吗?

JavaFX:stage.setOnCloseRequest() 不起作用