[英]JavaFX TreeTableView Image artefacts
我想将图像添加到TreeTableView中的每个节点。 为了做到这一点,我写了(根据在Google上找到的某些页面)以下内容:
调用以更新视图控制器中的视图
public void refreshView() {
final List<TreeItem<IUnit>> treeItems = new ArrayList();
final Collection<IUnit> onRootLevel = source.getUnitsOnRootLevel();
for (final IUnit unit : onRootLevel) {
treeItems.add(new MyTreeItem(unit));
}
root.getChildren().clear();
root.getChildren().addAll(treeItems);
}
每个项目都被包裹
public class MyTreeItem extends TreeItem<IUnit> {
private final IUnit unit;
public MyTreeItem(final IUnit unit) {
super(unit, new LevelImage(unit.getLevel().getIcon()).getImage());
this.unit = unit;
}
}
每个项目都会从BufferedImage转换图像
public class LevelImage {
private ImageView imageView;
public LevelImage(final BufferedImage image) {
imageView = new ImageView();
imageView.setFitHeight(16);
imageView.setFitWidth(16);
imageView.setVisible(true);
imageView.setImage(SwingFXUtils.toFXImage(image, null));
}
public ImageView getImage() {
return this.imageView;
}
}
原则上,这很好。 不幸的是,当我展开或关闭节点或刷新整个表时,这会留下图像的伪像,或者根本不再绘制图像。 有谁知道这可能是什么原因。 我从Java 10.0.1开始使用JavaFX
@Itai:谢谢! 但这似乎只是答案的一半。 问题也是这样的:
public MyTreeItem(final IUnit unit) {
super(unit, >> new LevelImage(unit.getLevel().getIcon()).getImage()) <<;
this.unit = unit;
}
我无法在此处设置图像,而必须在CellFactory中进行设置。 否则,这将不起作用。 所以这里的正确代码是
public MyTreeItem(final IUnit unit) {
super(unit);
this.unit = unit;
}
并且在工厂中完成了魔术,这意味着第一列不能再只是字符串了,而必须是对象本身才能获得图标。
无论如何,昨天我当然想到的是,TreeTableCell是一个私有的 “ updateItem”方法,带有just和“ integer”作为参数。 昨天我的挫败感似乎很高,我错过了这个细节(参数)。 我真的以为TreeTableCell的工作原理与其他所有对象不同,无论出于何种原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.