我的JavaFx FXML应用程序存在问题.
当我在表单上选中一个复选框时,我想根据单击的复选框执行一个方法.有没有办法可以将复选框的名称传递给方法,以便我可以对它执行一些有条件的工作?
我有两个复选框,只能选择一个.当我点击一个时,另一个应该被取消选择,反之亦然.显然下面的代码不起作用所以我希望传递被点击的对象的名称.
任何帮助将不胜感激,非常感谢.
@FXML private void updateRcs(){
if (chkRcsuri.isSelected()){
chkRcsuri2.setSelected(false);
}
if (chkRcsuri2.isSelected()){
chkRcsuri.setSelected(false);
}
}
Run Code Online (Sandbox Code Playgroud)
Ulu*_*Biy 27
您可以使用更改跟踪或使用JavaFX的事件处理机制.
使用这样的复选框,
final CheckBox chk1 = new CheckBox("chk 1");
final CheckBox chk2 = new CheckBox("chk 2");
Run Code Online (Sandbox Code Playgroud)
更改跟踪
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);
}
});
Run Code Online (Sandbox Code Playgroud)
使用事件处理
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);
Run Code Online (Sandbox Code Playgroud)
单选按钮不会为您提供互斥选择吗?只需确保将组名设置为相同 - 然后选择一个将自动取消选择另一个,您可以在Action事件中添加其他逻辑.
比试图在复选框周围重写相同的功能更好.