JavaFX单元样式

时间:2018-10-29 10:58:46

标签: javafx

我看过其他问题,但是他们不满足我的问题

我希望特定的单元格在树状视图中显示红色,并且使用

public void updateView()
{
    treeView.setCellFactory(tv -> new TreeCell<String>() {
        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);
            if (empty || item == null) {
            }
            else {
                for(ArrayList<TreeItem> x :Signals)
                {
                    for(TreeItem z: x)
                    {
                        if(z.getValue().equals(item))
                        {
                            setText(item);
                            setStyle("-fx-text-fill: red");
                        }
                        else{ setText(item);}
                    }
                }
            }
        }
    });
}

我尝试格式化它,对我来说不起作用。 发生的事情是弄乱了我的treeView表。查看图片:https://imgur.com/a/8tf76xn

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

请注意,单元已重用;如果为单元格分配了未标记的项目/单元格为空,则需要从单元格中删除样式和/或文本。此外,文本只需要分配一次:

treeView.setCellFactory(tv -> new TreeCell<String>() {
    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        setStyle(null);
        if (empty || item == null) {
            setText("");
        } else {
            setText(item);

            // apply style, if a TreeItem containing the same value as the item is found in Signals
            outer: for(List<TreeItem> x : Signals) {
                for(TreeItem z: x) {
                    if(z.getValue().equals(item)) {
                        setStyle("-fx-text-fill: red");
                        break outer;
                    }
                }
            }
        }
    }
});