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

时间:2018-01-07 19:25:50

标签: 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
  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绑定到Model中的变量。我目前正在这样做,但我得到CheckBox.selected : A bound value cannot be set.错误。

我要做的第二件事是检查,选择或分析了哪个复选框,并根据模型中的这个设置布尔变量。有什么方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

如果用户点击CheckBox,控件将尝试修改selected属性,该属性对于(单向)绑定的属性将失败。

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

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

如果模型只能由控制器修改,你也使用传统的绑定,但绑定需要反过来做:

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