【发布时间】:2018-01-08 04:07:17
【问题描述】:
我有这样的控制器类
public class Controller{
private final Model model;
@FXML
private CheckBox chbx1;
@FXML
private CheckBox chbx2;
@FXML
private CheckBox chbx3;
public Controller(Model model) {
this.model = model;
}
@FXML
private void initialize(){
chbx1.selectedProperty().bind(model.initProperty());
}
}
我的模型类是这样的
public class Model{
private final BooleanProperty init = new SimpleBooleanProperty(false);
public BooleanProperty initProperty() {
return init;
}
public final Boolean getInit() {
return initProperty().get();
}
public final void setInit(Boolean init) {
initProperty().set(init);
}
}
我想将 CheckBox 绑定到模型中的变量。我目前正在这样做,但我收到CheckBox.selected : A bound value cannot be set. 错误。
我想做的第二件事是检查选中或取消选中哪个复选框,并根据模型中的这个设置布尔变量。有什么方法可以做到这一点吗?
【问题讨论】:
-
错误是不言自明的 - 无法设置绑定值。这意味着如果您在其中一个属性上使用了绑定,则不应手动设置该值。
-
我还是不明白。我没有手动设置值。
-
复选框上的内置事件处理程序将在用户选中/取消选中它们时调用
setSelected。您是否打算将绑定反过来?你想做什么? (至少,这段代码没有意义,因为您将拥有三个始终具有完全相同状态的复选框。) -
我有 Checkboxex 作为示例。我还将它们的值保存到属性文件中,在我的项目开始后,我需要从属性文件中获取值并根据视图中的值设置复选框。然后当用户选中或取消选中 CheckBox 时,我需要将值保存到属性文件中。所以我的想法是拥有 booleanproperty 变量,并在开始后从属性文件将其设置为 vlaue 并将 checbox 绑定到它以在视图中更新它。清楚了吗?
-
checkBox.selectedProperty().bind(someBooleanProperty)表示复选框的selectedProperty将始终具有与someBooleanProperty相同的值。这与可编辑复选框不兼容,因为用户选中或取消选中复选框会违反绑定建立的规则 - 这就是导致异常的原因。这也意味着在您的代码中,所有三个复选框将始终具有相同的状态,这可能不是您想要的。所以你可能想要bindBidirectional并且在你的模型中需要三个属性。
标签: java model-view-controller javafx checkbox fxml