Получение изображений для динамического отображения на сетке - PullRequest
1 голос
/ 20 мая 2019

Моя цель - отобразить изображения, выбранные из средства выбора файлов, активированного кнопкой, и добавить эти изображения в мою сетку. Я могу получить правильное имя пути URL-файла из средства выбора файлов, чтобы сделать правильный просмотр изображения, однако при этом моя сетка не показывает добавляемые изображения ..

public void makeBrowseButton(Stage primaryStage) {

    //attach handler
    browseButton.setOnAction(new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent event) {
            FileChooser fileChooser = new FileChooser();                                                                            // create object
            fileChooser.getExtensionFilters()
                    .addAll(new FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif"));    //filter for music files
            //FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
            if (!parentPath.equalsIgnoreCase(
                    "")) {                                                                                //go to previous directory if exists
                File parentPathFile = new File(parentPath);
                fileChooser.setInitialDirectory(parentPathFile);
            }
            File selectedFile = fileChooser.showOpenDialog(primaryStage);

            if (selectedFile != null) {                                                  // display the dialog box
                String wholePath = selectedFile.getPath();
                String name = selectedFile.getName();
                String megaPath = selectedFile.getAbsolutePath();
                String megaUrl;
                try {
                    megaUrl = Paths.get(megaPath).toUri().toURL().toString();
                } catch (MalformedURLException e) {
                    throw new IllegalArgumentException(e);
                }

                parentPath = selectedFile.getParent();
                System.out.println("wholePath: " + wholePath);
                System.out.println("parent: " + parentPath);
                System.out.println("File Name: " + name);
                System.out.println("megaPath: " + megaUrl);
                //System.out.println("Canonical: " + Canonical);

                Image newAwesomeImage = new Image(megaUrl);
                paneofgridmonkeys.add(new ImageView(newAwesomeImage), 0, 0);
                //ImageView view = new ImageView();
                //view.setImage(newAwesomeImage);
                //paneofgridmonkeys.add(view, 1, 1);
                //paneofgridmonkeys.setConstraints(view, 0, 4);
                //paneofgridmonkeys.add(new Label("Changed the image!"), 0, 1);
                createDisplay(primaryStage);
            }
        }
    });
}

Я пробовал несколько способов вставки изображений, и вот пути к файлам, которые я получаю:

wholePath: \\jupiter\yr1005\Desktop\20190111_1340501.jpg
parent: \\jupiter\yr1005\Desktop
File Name: 20190111_1340501.jpg
megaPath: file://jupiter/yr1005/Desktop/20190111_1340501.jpg

(я пользуюсь мегапатом)

В основном, когда я выбираю изображение из filechooser, я не получаю ошибки, но изображение не отображается после выбора. Я просто получаю все печатные заявления взамен ... идея почему?

Это мой метод отображения Create:

   public void createDisplay(Stage primaryStage) {

   primaryStage.setTitle(this.MONKEY_TITLE);
   GridPane paneofgridmonkeys = new GridPane();
   paneofgridmonkeys.setAlignment(Pos.CENTER);
   paneofgridmonkeys.setVgap(10);
   paneofgridmonkeys.add(browseButton, 10, 10);

   ScrollPane allTehFaces = new ScrollPane(paneofgridmonkeys);
   allTehFaces.setFitToWidth(true);
       primaryStage.setScene(new Scene(allTehFaces, 500, 500));primaryStage.show();
     }
   }

1 Ответ

1 голос
/ 20 мая 2019

Ваша проблема в методе createDisplay;в частности, эта строка:

   GridPane paneofgridmonkeys = new GridPane();

Здесь вы создаете локальную область GridPane с именем paneofgridmonkeys, которая должна быть именем другой переменной уровня класса с именем paneofgridmonkeys, поскольку она доступна для makeBrowseButton.Когда вы делаете это в локальной области, новый созданный вами экземпляр становится тем, который используется внутри этого метода, а не экземпляром уровня класса;таким образом, один класс не добавляется к вашей сцене, и вы не видите изменений.

...