Обновление ImageViews в TilePane с помощью JavaFX (Простая справочная проблема?) - PullRequest
0 голосов
/ 01 апреля 2019

В настоящее время я пытаюсь обновить ImageViews в каждом тайле TilePane.

Переменная вверху класса доступна для всех методов: ImageView imgArray[] = new ImageView[20];

Создание исходного TilePane:

public TilePane createTilePane() {
    TilePane tile = new TilePane();
    tile.setPrefColumns(5);
    for (int i = 0; i < 20; i++) {
        tile.getChildren().add(this.createImageView("https://media.forgecdn.net/avatars/141/115/636539774401917932.jpeg", i));
    } //for
    return tile;
} //createTilePane()

public ImageView createImageView(String url, int x) {
    Image image = new Image(url);

    imgArray[x] = new ImageView();

    imgArray[x].setImage(image);
    imgArray[x].setFitWidth(100.0);
    imgArray[x].setFitHeight(100.0);
    imgArray[x].setImage(image);

    return imgArray[x];
} //createImageView()

Проблема в том, что когда я хочу изменить изображение на панели, я не могу.Например, я хочу иметь возможность: this.createImageView("url", 2); изменить плитку внутри панели плиток.

Я могу сделать это без ошибок, но изображение не меняется.

Любые идеи

1 Ответ

0 голосов
/ 02 апреля 2019

createImageView не обновляет сцену.Он просто создает новый ImageView и обновляет массив, содержащий данные.Вам нужно обновить сцену, если вы хотите изменить отображение.Лучший способ сделать это в этом сценарии - это изменить свойство image ImageView.

. Обратите внимание, что я немного переписал ваш код для повторного использования экземпляра Image.createImageView был переименован в setImage, так как это выглядит как лучшее название для того, что он делает со мной:

public TilePane createTilePane() {
    // reuse large object
    Image image = new Image("https://media.forgecdn.net/avatars/141/115/636539774401917932.jpeg");

    TilePane tile = new TilePane();
    tile.setPrefColumns(5);
    for (int i = 0; i < 20; i++) {
        ImageView imageView = createImageView();
        imageView.setImage(image);
        imgArray[i] = imageView;
        tile.getChildren().add(imageView);
    } //for
    return tile;
} //createTilePane()

private ImageView createImageView() {
    ImageView image = new ImageView();
    image.setFitWidth(100d);
    image.setFitHeight(100d);
    return image;
}

public void setImage(int index, String url) {
    ImageView imageView = imgArray[index];
    Image image = new Image(url);

    // change image in ImageView that was added to the scene
    imageView.setImage(image);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...