javafx:如何将颜色选择器添加到ListView?

时间:2016-11-22 16:07:24

标签: java listview javafx color-picker

我将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();
        }

    }   

1 个答案:

答案 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;
}

Preview of code snippet