我有一个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
。
答案 0 :(得分:1)
你应该可以这样做:
编辑以显示列定义 - 这需要将对象作为整体,而不是字符串。
@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());
}
}
});
答案 1 :(得分:0)
我也可以使用以下解决方案:
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("");
}
});