2017-02-23 6 views

Répondre

2

De la doc de showOpenDialog (Souligné par l'auteur):

Affiche un nouveau fichier de dialogue ouvert. La méthode ne retourne pas jusqu'à ce que la boîte de dialogue ouverte affichée soit fermée. La valeur de retour spécifie le fichier choisi par l'utilisateur ou null si aucune sélection n'a été faite. Si la fenêtre de propriétaire est définie pour le dialogue de fichier, la saisie dans toutes les fenêtres de la chaîne de propriétaire du dialogue est bloquée pendant l'affichage de la boîte de dialogue de fichier.

Ainsi, en raison de la chaîne propriétaire, dans ce cas, à la fois la primaryStage et secondStage sont obstruées:

primaryStage.setScene(new Scene(new VBox(), 300, 300)); 
primaryStage.show(); 

Stage secondStage = new Stage(); 
secondStage.setScene(new Scene(new VBox(), 50, 50)); 
secondStage.initOwner(primaryStage); 

secondStage.show(); 

FileChooser fc = new FileChooser(); 
fc.showOpenDialog(secondStage); 

Si vous modifiez la dernière ligne que

fc.showOpenDialog(primaryStage); 

le primaryStage est bloqué, mais le secondStage est disponible.


Enfin, si vous n'exécutez pas cette ligne:

secondStage.initOwner(primaryStage); 

et que vous appelez la dernière ligne comme

fc.showOpenDialog(secondStage); 

le primaryStage n'est pas bloqué, mais le secondStage est bloqué.

1

Avant de montrer la scène, invoquer stage.initModality soit comme APPLICATION_MODAL ou WINDOW_MODAL selon le cas. Appelez également stage.initOwner.

Stage stage = new Stage(); 
stage.initModality(Modality.WINDOW_MODAL); 
stage.initOwner(pane.getScene().getWindow()); 
stage.setScene(new Scene(content)); 
stage.show(); 

Remarque Vous ne pouvez pas appliquer les règles énoncées ci-dessus à FileChooser. Cependant, vous pouvez utiliser showOpenDialog(Window ownerWindow) pour cela.

fileChooser.showOpenDialog(stage) 

Ainsi, lorsque vous ouvrez la fenêtre de filechooser.Main sera bloquée.