【发布时间】:2018-03-29 18:20:22
【问题描述】:
我正在尝试在 JavaFX 中实现一个 TreeTableView,它包含“MyData”对象,并且有两列。第一列应该包含一个字符串;这很简单:
column1.setCellValueFactory((TreeTableColumn.CellDataFeatures<MyData, String> entry)
-> new ReadOnlyStringWrapper(entry.getValue().getValue().toString()));
对于第二列,我需要在 MyData 对象中使用一些更复杂的数据,并且我想基本上呈现一系列描述该数据的图标。所以,我尝试创建一个自定义单元格渲染器:
MyCellRenderer extends TreeTableCell<MyData, MyData> {
@Override
protected void updateItem(MyData item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setGraphic(null);
setText(null);
} else {
// building some ContentPane with an HBox of Images here..
setGraphic(contentPane);
}
}
}
然后设置列CellFactory和CellValueFactory如下:
column2.setCellValueFactory((TreeTableColumn.CellDataFeatures<MyData, MyData> entry)
-> new ReadOnlyObjectWrapper(entry));
column2.setCellFactory(param -> new MyCellRenderer());
但是我在运行时得到了这个异常:
线程“JavaFX 应用程序线程”中的异常 java.lang.ClassCastException: javafx.scene.control.TreeTableColumn$CellDataFeatures 不能强制转换 到我的数据
恐怕我并不真正理解所有这些类的不同泛型类型的含义,而且我也不确定“ReadOnlyObjectWrapper”。我只是尝试从第一列的设置中复制/粘贴和调整它。
如果有人能照亮我,我将非常感激。不幸的是,关于 TreeTableView 的 oracle 文档没有详细介绍,它们只是展示了简单的示例。
谢谢
【问题讨论】:
标签: javafx treetableview