JavaFX中细胞依赖于细胞的外观

时间:2018-05-08 20:10:20

标签: javafx tableview model-binding

如何根据JavaFX中tableView的同一列中另一个单元格的状态更改单元格的外观。

colHidden.setCellValueFactory(param -> {
        return param.getValue().hiddenProperty();
    });

colHidden.setCellFactory(tc -> new CheckBoxTableCell<>());
    colLabel.setCellFactory(...);

我有一个包含CheckBoxTableCell<>()的单元格。当我选中此复选框时,单元格colLabel的内容应替换为星号。

1 个答案:

答案 0 :(得分:0)

你可以这样做。这里的基本思想是“记住”对应于同一行中复选框的属性,假设单元格不为空,并为其添加一个更新文本的侦听器。每当单元格更新时,从上一个属性中删除侦听器。

<property>
  <name>dfs.datanode.du.reserved</name>
  <value>3221225472</value>
  <description>3GB of disk space reserved for non DFS usage. 
               This space will be left unconsumed by the Datanode.
     </description>
</property>

colLabel.setCellFactory(col -> new TableCell<RowType, ColumnType>() { private ObservableValue<Boolean> hiddenProperty ; ChangeListener<Boolean> listener = (obs, wasHidden, isNowHidden) -> updateText(isNowHidden); @Override protected void updateItem(ColumnType item, boolean empty) { super.updateItem(item, empty); if (hiddenProperty != null) { hiddenProperty.removeListener(listener); } if (empty) { setText(null); hiddenProperty = null ; } else { hiddenProperty = getTableView().getItems().get(getIndex()).hiddenProperty(); hiddenProperty.addListener(listener); updateText(hiddenProperty.get()); } } private void updateText(boolean hidden) { if (hidden) { setText("********"); } else { setText(getItem().toString()); // or other format for string, etc } } } RowType替换为ColumnType使用的实际类型(即假设您有colLabel)。