Первый ответ был не тем, что вы просите, моя ошибка. Вы используете один и тот же ImageView
для ячейки в ComboBox
и для кнопки ComboBox
. ImageView
может отображаться только в одном месте. Вам необходимо создать графический узел c для каждой ячейки в ComboBox
. Label
не является хорошим типом элемента для ComboBox
, поскольку он представляет узел пользовательского интерфейса, а не объект данных. Вот пример класса, который содержит ваши данные:
public class MyData {
private String name;
private Image image;
public MyData(String name, String imageUrl) {
this.name = name;
this.image = new Image(imageUrl);
}
public String getName() {
return name;
}
public Image getImage() {
return image;
}
}
Затем вы можете создать ComboBox
, используя этот класс:
ComboBox<MyData> comboBox = new ComboBox<>();
MyData data1 = new MyData("Gelbooru", "https://gelbooru.com/favicon.ico");
MyData data2 = new MyData("Danbooru", "https://i.imgur.com/7ek8bNs.png");
comboBox.getItems().addAll(data1, data2);
comboBox.setCellFactory(param -> new ListCell<>() {
final ImageView graphicNode = new ImageView();
@Override
protected void updateItem(MyData item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
setGraphic(null);
graphicNode.setImage(null);
} else {
setText(item.getName());
graphicNode.setImage(item.getImage());
setGraphic(graphicNode);
}
}
});