【问题标题】:How to bind checkbox to variable in JavaFX?如何将复选框绑定到 JavaFX 中的变量?
【发布时间】: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


【解决方案1】:

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

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

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

如果模型只能由控制器修改,你也可以使用常规绑定,但是需要反过来绑定:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 2016-02-25
    • 1970-01-01
    • 2013-03-31
    • 2012-03-06
    • 1970-01-01
    • 2013-04-06
    • 2013-07-13
    相关资源
    最近更新 更多