gpt4 book ai didi

JavaFX TreeTableView 图像工件

转载 作者:太空宇宙 更新时间:2023-11-04 10:18:04 25 4
gpt4 key购买 nike

我想将图像添加到 TreeTableView 中的每个节点。为了做到这一点,我编写了以下内容(根据 Google 找到的一些页面):

调用更新 View Controller 中的 View

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

Example of how it looks

最佳答案

@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 作为 private 'updateItem' 方法,以 just 和 'integer' 作为参数。看来我昨天的挫败感很高,而且我错过了那个细节(参数)。我真的认为 TreeTableCell 的工作方式与所有其他对象不同,无论出于何种原因。

关于JavaFX TreeTableView 图像工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com