我将Listview设置为CheckBoxListCell。现在我需要在每一行中添加一个颜色选择器来更改每个ListCell的颜色。我不知道在哪里可以将它放入CheckBoxListCell。
ListView my_list = new ListView();
my_list.setCellFactory(CheckBoxListCell.forListView(new Callback<Item, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(Item item) {
return item.onProperty();
}
}));
public class Item {
private final StringProperty name = new SimpleStringProperty();
private final BooleanProperty on = new SimpleBooleanProperty();
public Item(String name, boolean on) {
setName(name);
setOn(on);
}
public final StringProperty nameProperty() {
return this.name;
}
public final String getName() {
return this.nameProperty().get();
}
public final void setName(final String name) {
this.nameProperty().set(name);
}
public final BooleanProperty onProperty() {
return this.on;
}
public final boolean isOn() {
return this.onProperty().get();
}
public final void setOn(final boolean on) {
this.onProperty().set(on);
}
@Override
public String toString() {
return getName();
}
}
答案 0 :(得分:1)
我最近创建了类似的列表视图。这是代码:
//options is populated with some strings
options = FXCollections.observableArrayList();
listView = new ListView<String>();
listView.setPrefHeight(390);
listView.setItems(options);
listView.getStyleClass().add("scs-listview-dialog");
setListViewFactory();
listView.getSelectionModel().select(0);
...
...
private void setListViewFactory()
{
listView.setCellFactory(
(final ListView<String> p) -> new ListCell<String>()
{
@Override
protected void updateItem(final String item, final boolean empty)
{
super.updateItem(item, empty);
if (item != null)
{
Platform.runLater(() ->
{
this.setGraphic(makeGridPane(item));
});
}
}
});
}
private GridPane makeGridPane(final String item)
{
final GridPane gridPane = new GridPane();
final ColumnConstraints col1 = new ColumnConstraints();
final ColumnConstraints col2 = new ColumnConstraints();
col1.setHalignment(HPos.LEFT);
col1.setMinWidth(105);
col2.setHalignment(HPos.RIGHT);
col2.setMinWidth(105);
gridPane.getColumnConstraints().addAll(col1, col2);
final HBox spacer = new HBox();
spacer.setMinWidth(10);
final Label optionLabel = new Label(item);
ColorPicker colorPicker = new ColorPicker();
colorPicker.getStyleClass().add("colorPicker");
colorPicker.setOnMouseClicked((e) ->
{
listView.getSelectionModel().select(item);
});
colorPicker.setOnAction((ActionEvent t) ->
{
Color color = colorPicker.getValue();
String selectedItem = listView.getSelectionModel().getSelectedItem();
PyDevThemes pyDevThemeItem = PyDevThemes.valueByListItem(selectedItem);
getCurrentThemeValuesMap().put(pyDevThemeItem.getId(), colorToRGB(color));
updateLabelColoring(selectedItem, color);
});
GridPane.setConstraints(optionLabel, 0, 0);
GridPane.setConstraints(colorPicker, 1, 0);
gridPane.getChildren().addAll(optionLabel, colorPicker);
return gridPane;
}