Навсегда изменить цвет выбранного элемента в списке по нажатию кнопки? - PullRequest
0 голосов
/ 08 февраля 2019

Как изменить цвет выбранного элемента в списке при постоянном нажатии кнопки?

apsentButton.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {

        }
    });

Итак, у меня есть apsentButton и listview, и я хочу, чтобы когда я выбирал какой-либо элемент из списка и нажимал кнопку, чтобывыбранный вид становится зеленым постоянно, после нажатия на другой элемент из списка, я хочу, чтобы выбранный элемент сначала оставался зеленым ????

1 Ответ

0 голосов
/ 08 февраля 2019

Сохраните выбранные элементы в наблюдаемой коллекции и используйте cellFactory возвращающие ячейки, которые обновляют информацию об изменении элемента или обновлении списка.Чтобы выбрать разные цвета в зависимости от состояния выделения / фокуса, лучше всего использовать таблицу стилей CSS и PseudoClass для стилизации:

final PseudoClass marked = PseudoClass.getPseudoClass("marked");

final ListView<String> listView = new ListView<>();
for (int i = 1; i <= 100; i++) {
    listView.getItems().add("item " + i);
}

final ObservableSet<String> markedItems = FXCollections.observableSet(new HashSet<>());

Button button = new Button("mark");
button.setOnAction(evt -> markedItems.addAll(listView.getSelectionModel().getSelectedItems()));

listView.setCellFactory(lv -> new ListCell<String>() {

    final InvalidationListener l = o -> {
        String item = getItem();
        pseudoClassStateChanged(marked, item != null && markedItems.contains(item));
    };
    final WeakInvalidationListener listener = new WeakInvalidationListener(l);

    {
        markedItems.addListener(listener);
    }

    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);
        setText(item);
        l.invalidated(null);
    }

});

Таблица стилей, примененная к предку / сцене:

.list-cell:marked {
    -fx-base: green;
    -fx-selection-bar: #00FFFF;
    -fx-selection-bar-non-focused: #228822;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...