Javafx listview динамически изменяет цвет ячеек listview
Здравствуйте, я в настоящее время строю проект, который использует javaFx и мне было интересно, возможно ли динамически изменять цвет ячеек объектов в виде списка во время выполнения. Каждая ячейка списка представляет объект, цвет которого связан с ним. У меня проблема в том, что у каждого объекта есть цвет, который генерируется во время выполнения, и количество объектов не обязательно останется постоянным.
Основным графическим интерфейсом, с которым работает база кода javaFX, является fxml. Я пытался изучить использование CSS, но поскольку количество объектов и цветов, связанных с этими объектами, генерируется во время выполнения, я не могу жестко закодировать его в таблицу стилей. Я также хотел использовать фабрики ячеек для создания нужной ячейки для каждой ячейки, но мне нужно, чтобы цвет передавался на фабрику ячеек, и он должен быть в формате RGB. У кого-нибудь есть опыт работы с такой проблемой, как эта?
for (int i = 0; i Ниже то, что я пробовал до сих пор, говорит, что у внутренних классов должны быть конечные переменные. Есть ли способ изменить его так, чтобы он принимал значение rgb, которое я тоже пытаюсь установить?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;
}
});
}
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;
}
});