Javafx listview динамически изменяет цвет ячеек listview

Здравствуйте, я в настоящее время строю проект, который использует javaFx и мне было интересно, возможно ли динамически изменять цвет ячеек объектов в виде списка во время выполнения. Каждая ячейка списка представляет объект, цвет которого связан с ним. У меня проблема в том, что у каждого объекта есть цвет, который генерируется во время выполнения, и количество объектов не обязательно останется постоянным.

Основным графическим интерфейсом, с которым работает база кода javaFX, является fxml. Я пытался изучить использование CSS, но поскольку количество объектов и цветов, связанных с этими объектами, генерируется во время выполнения, я не могу жестко закодировать его в таблицу стилей. Я также хотел использовать фабрики ячеек для создания нужной ячейки для каждой ячейки, но мне нужно, чтобы цвет передавался на фабрику ячеек, и он должен быть в формате RGB. У кого-нибудь есть опыт работы с такой проблемой, как эта?

for (int i = 0; i

selectedMiceListView.setCellFactory(new Callback<ListView<Object>, 
ListCell<Object>>() {

         // @Override
                        public ListCell<Object> call(final ListView<Object> param) {
                            final ListCell<Object> cell = new ListCell<Object>() {

                                @Override
                                protected void updateItem(final Object item, final boolean empty) {
                                    super.updateItem(item, empty);
                                        setStyle("-fx-background-color: rgb(" + mice.mice.get(i).red + "," + mice.mice.get(i).green + ", " + mice.mice.get(i).blue + ");");

                                }
                            };
                            return cell;
                        }
                    });
                }

Ниже то, что я пробовал до сих пор, говорит, что у внутренних классов должны быть конечные переменные. Есть ли способ изменить его так, чтобы он принимал значение rgb, которое я тоже пытаюсь установить?

1 ответ

Попробуйте, приведенный ниже код закрашивает каждую ячейку в списке черным цветом

 this.listView
    .setCellFactory(new Callback<ListView<Object>, ListCell<Object>>() {

      @Override
      public ListCell<Object> call(final ListView<Object> param) {
        final ListCell<Object> cell = new ListCell<Object>() {

          @Override
          protected void updateItem(final Object item, final boolean empty) {
            super.updateItem(item, empty);
            setBackground(
                new Background(new BackgroundFill(Color.rgb(100, 150, 200), CornerRadii.EMPTY, Insets.EMPTY)));

          }
        };
        return cell;
      }
    });
Другие вопросы по тегам