如何在JavaFX中将复选框绑定到变量?

如何在JavaFX中将复选框绑定到变量?,java,model-view-controller,javafx,checkbox,fxml,Java,Model View Controller,Javafx,Checkbox,Fxml,我有这样的控制器类 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 priv

我有这样的控制器类

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);
   }
}
我的模型课看起来像这样

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);
   }
}
我想将复选框绑定到模型中的变量。我当前正在执行此操作,但我得到了
复选框。选中:无法设置绑定值。
错误


我想做的第二件事是检查,根据模型中的这组布尔变量,选中或取消选中哪个复选框。有什么方法可以做到这一点吗?

如果用户单击
复选框
,控件将尝试修改所选的
属性,该属性对于(单向)绑定的属性将失败

您可以执行双向绑定(如果您修改模型,则更改将导致ui中的更改):

如果模型只能由控制器修改,则也可以使用常规绑定,但绑定需要以另一种方式进行:

model.initProperty().bind(chbx1.selectedProperty());

如果用户单击
复选框
,控件将尝试修改
选定的
属性,该属性对于(单向)绑定的属性将失败

您可以执行双向绑定(如果您修改模型,则更改将导致ui中的更改):

如果模型只能由控制器修改,则也可以使用常规绑定,但绑定需要以另一种方式进行:

model.initProperty().bind(chbx1.selectedProperty());

错误是不言自明的-无法设置绑定值。这意味着,如果您对其中一个属性使用了绑定,则不应手动设置值。我仍然不明白。我没有手动设置值。当用户选中/取消选中复选框时,复选框上的内置事件处理程序将调用
setSelected
。你是不是打算用另一种方式装订?你想干什么?(至少,这段代码没有意义,因为您将有三个始终具有完全相同状态的复选框。)。我还将它们的值保存到属性文件中,项目开始后,我需要从属性文件中获取值,并根据视图中的值设置CheckBoxeX。然后,当用户选中或取消选中复选框时,我需要将值保存到属性文件。所以我的想法是让booleanproperty变量在启动后从属性文件将其设置为vlaue,并将checbox绑定到它以在视图中更新它。是否清楚?
checkBox.selectedProperty().bind(someBooleanProperty)
表示复选框的
selectedProperty
将始终与
someBooleanProperty
具有相同的值。这与可编辑的复选框不兼容,因为用户选中或取消选中复选框将违反绑定建立的规则-这就是导致异常的原因。这也意味着在代码中,所有三个复选框都将始终具有相同的状态,这可能不是您想要的。因此,您可能需要
bind
,并且模型中需要三个属性。错误是不言自明的-无法设置绑定值。这意味着,如果您对其中一个属性使用了绑定,则不应手动设置值。我仍然不明白。我没有手动设置值。当用户选中/取消选中复选框时,复选框上的内置事件处理程序将调用
setSelected
。你是不是打算用另一种方式装订?你想干什么?(至少,这段代码没有意义,因为您将有三个始终具有完全相同状态的复选框。)。我还将它们的值保存到属性文件中,项目开始后,我需要从属性文件中获取值,并根据视图中的值设置CheckBoxeX。然后,当用户选中或取消选中复选框时,我需要将值保存到属性文件。所以我的想法是让booleanproperty变量在启动后从属性文件将其设置为vlaue,并将checbox绑定到它以在视图中更新它。是否清楚?
checkBox.selectedProperty().bind(someBooleanProperty)
表示复选框的
selectedProperty
将始终与
someBooleanProperty
具有相同的值。这与可编辑的复选框不兼容,因为用户选中或取消选中复选框将违反绑定建立的规则-这就是导致异常的原因。这也意味着在代码中,所有三个复选框都将始终具有相同的状态,这可能不是您想要的。因此,您可能需要
bind
,并且在模型中需要三个属性。