JavaFx 动态列值
JavaFx dynamic column values
我有一个 TreeTableView<MyCustomRow>
,我想动态添加列。在 MyCustomRow
中,我有一个 Map<Integer, SimpleBooleanProperty>
行中的值。我以这种方式添加新列:
private TreeTableColumn<MyCustomRow, Boolean> newColumn() {
TreeTableColumn<MyCustomRow, Boolean> column = new TreeTableColumn<>();
column.setId(String.valueOf(colNr));
column.setPrefWidth(150);
column.setCellValueFactory(data -> data.getValue().getValue().getValue(colNr));
column.setCellFactory(factory -> new CheckBoxTreeTableCell());
column.setEditable(true);
colNr++;
return column;
}
然后table.getColumns().add(newColumn())
。
问题是当我选中一行中的 CheckBox
时,该行中的所有复选框都被选中。这是我的行的代码:
public class MyCustomRow {
private Map<Integer, SimpleBooleanProperty> values = new HashMap<>();
public MyCustomRow(Map<Integer, Boolean> values) {
values.entrySet().forEach(entry -> this.values
.put(entry.getKey(), new SimpleBooleanProperty(entry.getValue())));
}
public SimpleBooleanProperty getValue(Integer colNr) {
if (!values.containsKey(colNr)) {
values.put(colNr, new SimpleBooleanProperty(false));
}
return values.get(colNr);
}
}
所以我根据 colNr
设置单元格的值,我也尝试调试并且 values
地图中的值似乎不同,所以我不知道为什么当我只检查一个复选框时,复选框被选中。
在这一行中,
column.setCellValueFactory(data -> data.getValue().getValue().getValue(colNr));
显示单元格时调用处理程序。因此所有 colNr
都是最新值,最后一个索引的布尔值 属性 与所有单元格相关联。
调用newColumn()
时的值来调用handler,例如:
final Integer colNrFixed = colNr;
column.setCellValueFactory(data -> data.getValue().getValue().getValue(colNrFixed));
// ...
colNr++;
我有一个 TreeTableView<MyCustomRow>
,我想动态添加列。在 MyCustomRow
中,我有一个 Map<Integer, SimpleBooleanProperty>
行中的值。我以这种方式添加新列:
private TreeTableColumn<MyCustomRow, Boolean> newColumn() {
TreeTableColumn<MyCustomRow, Boolean> column = new TreeTableColumn<>();
column.setId(String.valueOf(colNr));
column.setPrefWidth(150);
column.setCellValueFactory(data -> data.getValue().getValue().getValue(colNr));
column.setCellFactory(factory -> new CheckBoxTreeTableCell());
column.setEditable(true);
colNr++;
return column;
}
然后table.getColumns().add(newColumn())
。
问题是当我选中一行中的 CheckBox
时,该行中的所有复选框都被选中。这是我的行的代码:
public class MyCustomRow {
private Map<Integer, SimpleBooleanProperty> values = new HashMap<>();
public MyCustomRow(Map<Integer, Boolean> values) {
values.entrySet().forEach(entry -> this.values
.put(entry.getKey(), new SimpleBooleanProperty(entry.getValue())));
}
public SimpleBooleanProperty getValue(Integer colNr) {
if (!values.containsKey(colNr)) {
values.put(colNr, new SimpleBooleanProperty(false));
}
return values.get(colNr);
}
}
所以我根据 colNr
设置单元格的值,我也尝试调试并且 values
地图中的值似乎不同,所以我不知道为什么当我只检查一个复选框时,复选框被选中。
在这一行中,
column.setCellValueFactory(data -> data.getValue().getValue().getValue(colNr));
显示单元格时调用处理程序。因此所有 colNr
都是最新值,最后一个索引的布尔值 属性 与所有单元格相关联。
调用newColumn()
时的值来调用handler,例如:
final Integer colNrFixed = colNr;
column.setCellValueFactory(data -> data.getValue().getValue().getValue(colNrFixed));
// ...
colNr++;