在 JavaFX 中,当 TextField 的值未设置为零时是否可以启用复选框
In JavaFX, Is it possible to enable a CheckBox when the TextField's value is not set to Zero
当我在 TextField
中输入非零值时,如何启用我的 CheckBox
?
默认情况下,我已将 CheckBox
设置为在 Scene Builder 中禁用。
在我的 MainController
class:
@FXML
private CheckBox cb1;
@FXML
private TextField txt1;
public void enableCB() {
if (txt1.getText() == "0") {
cb1.setDisable(true);
} else {
cb1.setDisable(false);
}
}
在 Scene Builder 中,我已将 “enableCb 方法” 设置为 On Action 和 On Key Typed ,但仍然没有提供正确的条件和输出。
我建议写一个ChangeListener for the text property的TextField
。
txt1.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable,
String oldValue,
String newValue) {
if ("0".equals(newValue)) {
cb1.setDisable(true);
}
else {
cb1.setDisable(false);
}
}
});
每当TextField
中的文本发生变化时,无论文本如何变化,上面的代码都会执行。
另请注意,在 Java 中比较不同字符串的方法是使用方法 equals
而不是使用等号运算符,即 ==
.
这可以通过相当简单的单语句绑定来完成:
cb1.disableProperty().bind(
txt1.textProperty().isEmpty()
.or(txt1.textProperty().isEqualTo("0")));
仅当 TextField
中输入的值不是“0”时,才会启用 CheckBox
。因此,如果文本为空或“0”,它将被禁用。
当我在 TextField
中输入非零值时,如何启用我的 CheckBox
?
默认情况下,我已将 CheckBox
设置为在 Scene Builder 中禁用。
在我的 MainController
class:
@FXML
private CheckBox cb1;
@FXML
private TextField txt1;
public void enableCB() {
if (txt1.getText() == "0") {
cb1.setDisable(true);
} else {
cb1.setDisable(false);
}
}
在 Scene Builder 中,我已将 “enableCb 方法” 设置为 On Action 和 On Key Typed ,但仍然没有提供正确的条件和输出。
我建议写一个ChangeListener for the text property的TextField
。
txt1.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable,
String oldValue,
String newValue) {
if ("0".equals(newValue)) {
cb1.setDisable(true);
}
else {
cb1.setDisable(false);
}
}
});
每当TextField
中的文本发生变化时,无论文本如何变化,上面的代码都会执行。
另请注意,在 Java 中比较不同字符串的方法是使用方法 equals
而不是使用等号运算符,即 ==
.
这可以通过相当简单的单语句绑定来完成:
cb1.disableProperty().bind(
txt1.textProperty().isEmpty()
.or(txt1.textProperty().isEqualTo("0")));
仅当 TextField
中输入的值不是“0”时,才会启用 CheckBox
。因此,如果文本为空或“0”,它将被禁用。