JafaFX ListView更改单个单元格/项目/行的颜色

时间:2018-10-02 13:42:07

标签: java listview javafx javafx-8 cell

这个问题的答案可能很简单,所以我将尽量保持自己的状态。

我的问题 我希望通过Text-Color自定义不同Cells/Rows/Items的{​​{1}}。我的代码确实可以工作,但并不是我真正希望的那样。.每次将新的JavaFX ColorPicker添加到Item时,整个ListView都会更改其ListView { 1}}被选择为最新的Text-Color

这是我的代码(下面链接了完整的类,但我认为不需要)

Text-Color

full class

谢谢!

1 个答案:

答案 0 :(得分:0)

ListView使用一种项目类型,该类型除了字符串之外还包含ObjectProperty<Color>

private static class ListItem {
    public ListItem(String text) {
        this.text = text;
    }

    private final String text;
    private final ObjectProperty<Color> color = new SimpleObjectProperty(Color.BLACK);
}
ListView<ListItem> listView;
listView.setCellFactory(cell -> {
    ListCell<ListItem> cel = new ListCell<ListItem>() {
        @Override
        protected void updateItem(ListItem item, boolean empty) {
            super.updateItem(item, empty);
            if (item != null) {
                textFillProperty().bind(item.color);
                setFont(Font.font(16));
                setText(item.text);
            } else {
                setText("");
                textFillProperty().unbind();
                setTextFill(Color.BLACK);
            }
        }
    };
    return cel;
});

如果要更改颜色,只需要将属性设置为其他值,例如:

ListItem selectedItem = listView.getSelectionModel().getSelectedItem();
if (item != null) {
    item.color.set(Color.RED);
}