Диалог не может быть заблокирован, когда FileChooser открыт - PullRequest
0 голосов
/ 09 мая 2018

У меня есть вопрос о блокировке диалогового окна при открытии FileChooser.Когда я открываю FileChooser из главного окна приложения, у меня не возникает проблем с блокировкой главного окна приложения (используя fileChooser.showOpenDialog(Main.getPrimaryStage);).Но у меня проблема, когда я открываю Filechooser из диалога.Я не могу сосредоточиться на главном окне приложения, потому что Dialog имеет свойство dialog.initOwner(Main.getPrimaryStage());, но я все еще могу сосредоточиться на Dialog и открывать следующий FileChooser, снова и снова. Просмотр изображения приложения .Что я могу сделать с этим?

1 Ответ

0 голосов
/ 09 мая 2018

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

Window dialogWindow = dialog.getDialogPane().getScene().getWindow();

Используя это, вы можете сделать «владельцем» выбора файла диалоговое окно:

Window dialogWindow = dialog.getDialogPane().getScene().getWindow();
File file = fileChooser.showOpenDialog(dialogWindow);

Вот SSCCE:

import java.io.File;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.DialogPane;
import javafx.scene.layout.StackPane;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.stage.Window;

public class DialogFileChooser extends Application {

    @Override
    public void start(Stage primaryStage) {


        Button button = new Button("Open Dialog...");
        button.setOnAction(e -> createDialog(primaryStage).show());

        StackPane root = new StackPane(button);
        Scene scene = new Scene(root, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private Dialog<ButtonType> createDialog(Window owner) {

        DialogPane dialogPane = new DialogPane();
        dialogPane.getButtonTypes().add(ButtonType.CLOSE);

        Dialog<ButtonType> dialog = new Dialog<>();

        dialog.setDialogPane(dialogPane);

        Button openFile = new Button("Open File...");
        FileChooser fileChooser = new FileChooser();
        openFile.setOnAction(e -> {
            Window dialogWindow = dialog.getDialogPane().getScene().getWindow();
            File file = fileChooser.showOpenDialog(dialogWindow);
            System.out.println(file);
        });
        dialogPane.setContent(new StackPane(openFile));

        dialog.initOwner(owner);
        return dialog ;

    }

    public static void main(String[] args) {
        launch(args);
    }
}
...