Как добавить изображения в качестве опции в поле со списком в Java FX - PullRequest
0 голосов
/ 20 октября 2019

Я попытался добавить изображения в поле со списком, чтобы отобразить их в качестве параметров, но как только я выбрал изображения, они стали белыми, когда раскрывающийся список снова открылся, чтобы выбрать их, они стали белыми.

ImageView img1 = new ImageView(getClass().getResource("item1.png").toExternalForm());
ImageView img2 = new ImageView(getClass().getResource("item2.jpg").toExternalForm());
ImageView img3 = new ImageView(getClass().getResource("item3.jpg").toExternalForm());
img1.setFitHeight(60);
img1.setFitWidth(60);
img1.setPreserveRatio(true);
img2.setFitHeight(60);
img2.setFitWidth(60);
img2.setPreserveRatio(true);
img3.setFitHeight(60);
img3.setFitWidth(60);
img3.setPreserveRatio(true);
combobox.getItems().addAll(img1,img2,img3);

варианты работают толькоодин раз, и они становятся белыми, когда я пытаюсь выбрать их снова.

1 Ответ

1 голос
/ 20 октября 2019

Вы неправильно настраиваете элементы. Вам нужно использовать метод setCellFactory () в выпадающем списке, чтобы элементы списка генерировались правильно, поскольку ожидается, что элементы будут списком соответствующих данных, а не узлами. Объект ListCell может затем вызывать setGraphic (ImageView) для itw и обновлять этот элемент списка до указанного изображения.

Вот пример кода из моего старого проекта, который фактически предназначен дляListView, но будет работать точно так же, как ComboBox:

pieceData = FXCollections.observableArrayList("Boot", "Car", "Dog", "Hat", "Iron",
                                                  "Ship", "Thimble", "Wheelbarrow");
pieceSelection.setItems(pieceData);

pieceSelection.setCellFactory(e -> new ListCell<String>() {
    private ImageView view = new ImageView();
    @Override
    public void updateItem(String name, boolean empty) {
        super.updateItem(name, empty);
        if(empty) {
            setGraphic(null);
        }
        else {
            view.setImage(new Image("whatever the filepath to your image is"));
            // Add other set up for ImageView dimensions etc
            setGraphic(view);
        }
    }
});

Имейте в виду, что при этом отображаются только изображения, потому что метод setText (String) должен вызываться для отображения любого текста.

Также, как говорилось в kleopatra, вы должны прочитать базовое руководство по JavaFX, поскольку этот тип вещей хорошо документирован и относительно прост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...