【问题标题】:JavaFX Observable List Boolean attributes not reflected on CheckBoxesJavaFX Observable List Boolean 属性未反映在 CheckBox 上
【发布时间】:2017-05-09 22:55:34
【问题描述】:

我正在尝试在表格上显示用户列表。我编写以下代码以完成表格,但是布尔值不会显示在复选框上(当实际上有几个为真时,它们总是填充为空/假)。作为测试,我只是添加一个我正在“手动”创建的对象 下面是代码:

TableView<User> objTable = new TableView<User>();
objTable.setEditable(true);
ObservableList<User> objList = FXCollections.observableArrayList(new User("User 1", true);
TableColumn objColumnName = new TableColumn<User, String>("Column Name");
TableColumn objColumnActive = new TableColumn<User, Boolean>("Active");
objColumnName.setCellValueFactory(new PropertyValueFactory<User, String>("DisplayName"));
objColumnActive.setCellValueFactory(new PropertyValueFactory<UserRequestVO, Boolean>("Active"));
objTable.getColumns().addAll(objColumn);
objTable.setItems(objList);

用户类

public class user
{
     private String strFirstName;
     private Boolean bolActive;
     public Boolean getActive()
     {
          return this.bolActive
     }
}

我也尝试将 getActive 函数重命名为 isActive,但没有任何变化

【问题讨论】:

标签: javafx observablelist


【解决方案1】:

你应该使用属性,

在您的用户类中,您可以将布尔值存储为 SimpleBooleanProperty

private SimpleBooleanProperty bolActive;

像这样实例化:this.bolActive = new SimpleBooleanProperty(false); //Or true instead of false

现在为属性、属性值和属性值创建一个 getter:

public BooleanProperty bolActiveProperty(){
        return bolActive;
}

public final Boolean getBolActive() {
    return bolActive.get();
}

public final void setBolActive(Boolean bolActive) {
    this.bolActive.set(bolActive);
}

现在,当您创建表格列时,您可以这样做:

objColumnActive.setCellValueFactory(cellData -> cellData.getValue().bolActiveProperty());

或者,如果您更喜欢老式 Java:

objColumnActive.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<User,Boolean>, ObservableValue<Boolean>>() {              

    @Override
    public ObservableValue<Boolean> call(CellDataFeatures<User, Boolean> cellData) {
        return cellData.getValue().bolActiveProperty();
    }
});

我认为这也有效,但可能是错误的:

objColumnActive.setCellValueFactory(new PropertyValueFactory<User, Boolean>("bolActive"));

这将允许您将 User 属性绑定到列,以便对列的任何修改都会影响用户中的值。

好消息是您可以使用
myProperty.addListener((obs, oldV, newV) -&gt; { /* Your code */ });
收听值修改 其中obs 是观察到的值,oldV 是旧值,newV 是新值(显然)

这对你有帮助/有用吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-29
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多