【问题标题】:JavaFx ObservableList want to change the color of each cellsJavaFx ObservableList 想要改变每个单元格的颜色
【发布时间】:2018-09-25 00:37:35
【问题描述】:

这就是我正在做的事情。

ListView listView = new ListView();
listView.setBackground(new Background(new 
BackgroundFill(Color.BLACK,CornerRadii.EMPTY, Insets.EMPTY)));
listView.setPrefSize(400,450);
ObservableList list = FXCollections.observableArrayList();
list.add(label);
list.add(label2);
listView.setItems(list);

所以我可以更改 listView 的背景颜色,但问题是当我这样做时 listView.setItems(list);它没有向我显示背景颜色。它实际上是在隐藏它。因此,我认为我应该更改可观察列表单元格的颜色,而不是更改 listView 的背景,但我不知道该怎么做。任何帮助将不胜感激。提前谢谢你。

【问题讨论】:

  • 请提供一个minimal reproducible example 来说明问题。注意:您永远不会将控件添加为 listItems,而是添加数据和 - 如果您需要自定义视觉效果 - 一个自定义 cellFactory,它会创建根据需要配置自身的单元

标签: listview javafx observablelist


【解决方案1】:

正如 kleopatra 所说,您不能将组件添加为项目。这些项目必须是仅包含数据的对象。

如果您尝试添加标签,我假设您想在每个单元格上显示一个字符串,因此您应该执行以下操作:

ListView<String> listView = new ListView<>();
listView.setPrefSize(400,450);
listView.getItems().addAll("Foo", "Bar", "Baz");

自定义外观最好只使用css。

.list-cell { -fx-text-fill: black; }
.list-cell:odd { -fx-background-color: white;}
.list-cell:even { -fx-background-color: #8f8; }

而且...如果您想自定义每个单元格的显示方式和行为方式,您可以像这样设置一个单元格工厂:

listView.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
        @Override
        public ListCell<String> call(ListView<String> param) {
            ListCell<String> cell = new ListCell() {
                @Override
                protected void updateItem(Object item, boolean empty) {
                    super.updateItem(item, empty);

                    setGraphic(null);

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

            return cell;
        }
    });

通常在创建单元工厂时,通常会覆盖 updateItem(配置单元以反映项目内容)和 commitEdit(将单元编辑的结果保存在项目中)。

【讨论】:

    猜你喜欢
    • 2023-02-04
    • 2019-03-07
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    相关资源
    最近更新 更多