2015-10-15 5 views
1

avez un problème avec JavaFX où whenI popup de une nouvelle étape, cette nouvelle fenêtre prendre le focus de toute application Windows avec mise au point actuelleJavaFX arrêter une nouvelle fenêtre voler accent

je le veux popup de l'avant, mais pas prendre mise au point, donc si l'utilisateur a été taper ailleurs ils peuvent continuer à taper etc.

In swing, vous pouvez contourner ce problème en:

dialog.setFocusable(false); 
    dialog.setVisible(true); 
    dialog.setFocusable(true); 

Il semble y avoir aucune option similaire dans JavaFX. Exemple ci-dessous, lorsque vous cliquez sur le bouton, une nouvelle étape apparaîtra, prenant le focus (notez que je ne veux pas demander le focus, car dans l'application réelle, l'utilisateur pourrait écrire un email ou sur une page web lorsque le menu contextuel se produit, il a besoin de ne pas prendre l'accent de ces activités)

 import javafx.application.Application; 
     import javafx.scene.Scene; 
     import javafx.scene.control.Button; 
     import javafx.stage.Stage; 

    public class Main extends Application { 

     private Stage stage; 

     @Override public void start(Stage stage) { 
      this.stage = stage; 
      stage.setTitle("Main Stage"); 
      stage.setWidth(500); 
      stage.setHeight(500); 


      Button btnPopupStage = new Button("Click"); 
      btnPopupStage.setOnMouseClicked(event -> popupStage()); 
      Scene scene = new Scene(btnPopupStage); 

      stage.setScene(scene); 
      stage.show(); 
     } 

     private void popupStage(){ 
      Stage subStage = new Stage(); 
      subStage.setTitle("Sub Stage"); 
      subStage.setWidth(250); 
      subStage.setHeight(250); 
      subStage.initOwner(stage); 
      subStage.show(); 
      System.out.println("Does main stage have focus : "+stage.isFocused()); 
      System.out.println("Does popup have focus : "+subStage.isFocused()); 
     } 

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

Toutes les idées pour une étape de ne pas prendre l'accent sur un stage.show()? Merci

Répondre

0

pour éviter ce que vous décrivez en supposant que la cause de votre problème, alors vous devez ajouter subStage.initModality(Modality.NONE);. Mais ce n'est pas le problème, en fait il n'y a pas de problème ici regarder ici

stage.setWidth(500); // your stage is 500 wide 
stage.setHeight(500); // & 500 long 
Scene scene = new Scene(btnPopupStage);// your scene has a parent which is button 
//by inheritance if i should say your button is 500 wide & long. 

Avez-vous vu le problème? votre bouton répondra toujours aux événements de clic qui dans l'événement créeront un nouveau Stage donc donnentz l'attention à cela Stage

+0

Salut, Merci pour la réponse. la Modalité par défaut est AUCUN, donc je ne l'ai pas définie, et le paramétrer ne fait aucune différence. Je ne suis pas sûr d'avoir clarifié le problème. Je veux qu'une nouvelle scène apparaisse, mais je ne veux pas que l'on s'y concentre, je voudrais me concentrer pour rester là où elle était. Je n'ai pas défini la taille sur le bouton car c'était juste pour une démo rapide pour faire une autre scène popup sur commande. – user486415

1

Juste incase quelqu'un est cherche, je n'ai pas pu trouver une solution, mais j'ai trouvé quelqu'un avec le même problème qui soulevé un billet pour le OpenJDK https://bugs.openjdk.java.net/browse/JDK-8090742

pour contourner le problème, malheureusement, je mets le volet JavaFX dans un JFrame Swing et vient d'appeler

dialog.setFocusableWindowState(false); 
dialog.setVisible(true); 
dialog.setFocusableWindowState(true); 

qui a fixé l'objectif de voler problème, mais pas sûr sur les effets d'avoir JFx dans un swi ng JFrame.

Si quelqu'un trouve un moyen de voler sans focus d'une nouvelle fenêtre dans JFx, faites le moi savoir.
Merci