JavaFx ObservableList 想要改变每个单元格的颜色
JavaFx ObservableList want to change the color of each cells
这是我正在做的。
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);它没有向我显示背景 color.It 实际上隐藏了它。所以,我想我应该改变可观察列表单元格的颜色,而不是改变 listView 的背景,但我不知道该怎么做。任何帮助将不胜感激。提前谢谢你。
正如 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;
}
});
通常在创建 Cell Factory 时,通常会覆盖 updateItem(配置单元以反映项目内容)和 commitEdit(将单元编辑的结果保留在项目中)。
这是我正在做的。
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);它没有向我显示背景 color.It 实际上隐藏了它。所以,我想我应该改变可观察列表单元格的颜色,而不是改变 listView 的背景,但我不知道该怎么做。任何帮助将不胜感激。提前谢谢你。
正如 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;
}
});
通常在创建 Cell Factory 时,通常会覆盖 updateItem(配置单元以反映项目内容)和 commitEdit(将单元编辑的结果保留在项目中)。