Вы создаете новый ImageView
в своем обработчике событий, но никогда ничего не делаете с ним, поэтому он просто отбрасывается.
Обратите внимание, что оба ImageView
имеют одинаковое имя переменной: область действия, которую вы создаете (и отбрасываете), ограничена блоком if
, поэтому тот, который вы ссылаетесь за пределами блока, является тем, который вы определяете в файле F XML.
Итак, ваш код
@FXML
public void initialize(ActionEvent e) throws Exception{
addPhotos.setOnAction(event -> {
FileChooser chooser = new FileChooser();
File file = chooser.showOpenDialog(null);
pic = new Image(file.toURI().toString());
if(pic != null) {
// Create a new image view, containing the selected image
// (but do nothing with it)
ImageView imgView = new ImageView(pic);
}
// now update the existing ImageView (from the FXML file) with
// the chosen image:
imgView.setImage(pic);
});
}
Что вы хотите сделать (я предполагаю, поскольку вы не очень четко объяснили желаемое поведение), это добавить новое представление изображения на панель плитки:
@FXML
public void initialize(ActionEvent e) throws Exception{
addPhotos.setOnAction(event -> {
FileChooser chooser = new FileChooser();
File file = chooser.showOpenDialog(null);
pic = new Image(file.toURI().toString());
if(pic != null) {
ImageView imgView = new ImageView(pic);
imgView.setFitWidth(306);
imgView.setFitHeight(378);
imgView.setPreserveRatio(true);
tp.getChildren().add(imgView);
}
});
}
и конечно, вам не нужен просмотр изображений в файле F XML:
<BorderPane prefHeight="737.0" prefWidth="934.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="legioDesk.GalleryController">
<top>
<Button fx:id="addPhotos" mnemonicParsing="false" onAction="#initialize" text="addPhotos" BorderPane.alignment="CENTER" />
</top>
<center>
<TilePane fx:id="tp" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
</TilePane>
</center>
</BorderPane>