如何使用 JavaFX 中的复选框从列表视图更新单元格的背景颜色?
How to update the background color of the cells from a list view with checkboxes in JavaFX?
所以,我在 JavaFX 中得到了一个列表视图,并且我在每个单元格中添加了一个复选框。
listView.setCellFactory(CheckBoxListCell.forListView(new Callback<String, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(String item) {
BooleanProperty observable = new SimpleBooleanProperty();
observable.addListener((obs, wasSelected, isNowSelected) -> selected.add(item));
return observable;
}
}));
进行一些处理后,我需要能够根据某些结果更改每个单元格的背景颜色(颜色为 green/red)
我找到了一种方法:
listView.setCellFactory(list -> {
return new ListCell() {
@Override
protected void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
if (passed.contains(item))
setStyle("-fx-background-color: green; -fx-text-fill: white");
else
setStyle("-fx-background-color: red; -fx-text-fill: white");
setText((String) item);
}
};
});
问题是这会为列表视图设置新的单元格并删除复选框。
是否可以通过某种方式更改背景颜色并保留复选框?
你可以这样做:
listView.setCellFactory(list -> new CheckBoxListCell(item -> {
BooleanProperty observable = new SimpleBooleanProperty();
observable.addListener((obs, wasSelected, isNowSelected) ->
selected.add(item)
);
return observable;
}) {
@Override
public void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
if (passed.contains(item)){
setStyle("-fx-background-color: green; -fx-text-fill: white");
setText((String) item);
}else {
setStyle("-fx-background-color: red; -fx-text-fill: white");
setText((String) item);
}
}
});
所以,我在 JavaFX 中得到了一个列表视图,并且我在每个单元格中添加了一个复选框。
listView.setCellFactory(CheckBoxListCell.forListView(new Callback<String, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(String item) {
BooleanProperty observable = new SimpleBooleanProperty();
observable.addListener((obs, wasSelected, isNowSelected) -> selected.add(item));
return observable;
}
}));
进行一些处理后,我需要能够根据某些结果更改每个单元格的背景颜色(颜色为 green/red) 我找到了一种方法:
listView.setCellFactory(list -> {
return new ListCell() {
@Override
protected void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
if (passed.contains(item))
setStyle("-fx-background-color: green; -fx-text-fill: white");
else
setStyle("-fx-background-color: red; -fx-text-fill: white");
setText((String) item);
}
};
});
问题是这会为列表视图设置新的单元格并删除复选框。
是否可以通过某种方式更改背景颜色并保留复选框?
你可以这样做:
listView.setCellFactory(list -> new CheckBoxListCell(item -> {
BooleanProperty observable = new SimpleBooleanProperty();
observable.addListener((obs, wasSelected, isNowSelected) ->
selected.add(item)
);
return observable;
}) {
@Override
public void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
if (passed.contains(item)){
setStyle("-fx-background-color: green; -fx-text-fill: white");
setText((String) item);
}else {
setStyle("-fx-background-color: red; -fx-text-fill: white");
setText((String) item);
}
}
});