[英]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.