TableView / CellValueFactory - 根据另一个属性的值更改显示的属性



我有一个填充了自定义对象的TableView;该表显示该对象的属性。

我的问题是,如何根据该行的另一个属性的值将不同的属性绑定到该列?

例如,假设我有这个对象:

public class MyObject() {
private SimpleStringProperty name = new SimpleStringProperty("");
private SimpleStringProperty type = new SimpleStringProperty("");
}

现在在TableView,我有两列:

+---------+--------+
| NAME    | TYPE   |
+---------+--------+
| Robert  | Mgr    |
+---------+--------+

但是,如果type = "Something",我希望Type列实际显示name属性的值:

+---------+--------+
| NAME    | TYPE   |
+---------+--------+
| Robert  | Robert |
+---------+--------+

我不清楚如何根据同一对象实例中另一个属性的值设置不同的PropertyValueFactory

你应该能够做这样的事情:

编辑以显示列定义 - 这需要将对象作为一个整体,而不是一个字符串。

@FXML 
private TableColumn<MyObject,MyObject> changingColumn;

//Where you initialize the table
changingColumn.setCellValueFactory(cellData -> new ReadOnlyObjectWrapper<>(cellData.getValue()));
changingColumn.setCellFactory(tc -> new TableCell<MyObject, MyObject>() {
@Override
public void updateItem(MyObject item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText("");
} else if ("something".equals(item.getType())){
setText(item.getName());
}else {
setText(item.getType());
}
}
});

我也能够使用以下解决方案:

colType.setCellValueFactory(param -> {
if (param.getValue() != null) {
if (param.getValue().getType().equals("Something")) {
return new SimpleStringProperty(param.getValue().getName);
} else {
return new SimpleStringProperty(param.getValue().getType());
}
} else {
return new SimpleStringProperty("");
}
});

最新更新