簡體   English   中英

JavaFX TreeTableView圖像偽像

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM