Ниже приведен быстрый пример, когда в первом окне есть кнопка, которая открывает DirectoryChooser
. Как только каталог был выбран, открывается второе меньшее окно с Модальностью, установленной на APPLICATION_MODAL
. Во втором окне вы можете добавить загруженные изображения и добавить их к GridPane
.
import java.io.File;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Modality;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(final String[] args) {
launch(args);
}
@Override
public void start(final Stage aStage) throws Exception {
final HBox root = new HBox();
final Button browseBtn = new Button("Click to open a Directory chooser");
root.getChildren().add(browseBtn);
browseBtn.setOnAction(e -> {
final DirectoryChooser chooser = new DirectoryChooser();
final File dir = chooser.showDialog(aStage);
openNewModalStage(aStage, dir);
});
final Scene scene = new Scene(root, 500, 500);
aStage.setScene(scene);
aStage.show();
}
private void openNewModalStage(final Stage aStage, final File aDirectory) {
final Stage stage = new Stage();
final GridPane grid = new GridPane();
final Scene scene = new Scene(grid);
grid.setStyle("-fx-background-color:black");
grid.setPrefWidth(400);
grid.setPrefHeight(400);
// get your images from 'aDirectory' and add them to your grid pane.
stage.setScene(scene);
// set the new windows Modality.
stage.initModality(Modality.APPLICATION_MODAL);
stage.show();
}
}
Таким образом, вам понадобится всего одна кнопка, и диалоговое окно появится, как только Вы выбрали каталог. Однако, если вам все еще нужна кнопка «Поиск и показ», просто сохраните каталог как переменную, добавьте прослушиватель для кнопки «show», переместите к нему вызов openNewModalStage и удалите второй аргумент.
Редактировать: Кроме того, в зависимости от того, сколько изображений и что именно вы хотите отобразить в модальном окне, вы можете пересмотреть GridPane
и использовать TilePane
или hbox / vbox внутри панель прокрутки. Это просто мысль, но я не знаю, что вы будете делать с GridPane
.