Pourquoi JDialog 'saute' sur setLocationRelativeTo()?


1

Avoir une classe qui étend JDialog. Il est initialisé entièrement sur EDT (juste au cas où). Maintenant,

public PropsDialog (JFrame parentFrame) 
{ 
    super(parentFrame); 
    // boring 
    pack(); 
    setLocationRelativeTo(getParent()); 
    setVisible(true); 
} 

résultats dans le dialogue apparaissant dans le coin gauche, puis en sautant à sa position prévue. Est-ce que je me trompe?

  0

Qu'est-ce qui se passe lorsque vous appelez pack() après setLocationRelativeTo()? 22 févr.. 092009-02-22 11:36:20

  0

Saute du même coin et ne se centre pas correctement sur le cadre parent (ce qui est correct). Cela ressemble à un bug car j'obtiens ce comportement uniquement sur les LaF intégrés. Synth fonctionne comme prévu. 22 févr.. 092009-02-22 12:44:38

  0

Pourquoi ne pas appeler setVisible (false) juste avant setLocationRelativeTo()? 22 févr.. 092009-02-22 13:32:08

  0

Vraiment apprécier votre effort. Merci. Malheureusement, cela ne change rien. Je pense que je vais finir par vérifier différents JDK sous Win, Linux et Mac pour voir si le comportement est le même. 22 févr.. 092009-02-22 14:51:50

1

Pourriez-vous fournir un exemple de travail et plus d'informations? Par exemple, sur quel système d'exploitation testez-vous? Swing a quelques différences entre certains, par ex. JDialogues sans qu'un parent obtienne une entrée dans le panneau de gnome mais pas dans la barre des tâches de Windows et des choses comme cela. Deuxièmement, j'imagine que votre JDialog est visible avant que vous n'appeliez setLocationRelativeTo, peut-être par quelque chose dans la partie que vous avez commentée comme ennuyeuse. Je suggère, vous percez un

rapide
System.out.println(isVisible()); 

dans votre code, juste avant setLocationRelativeTo, juste au cas où ...

  0

Vous étiez proche :). En refaisant le dialogue pour étendre JDialog, j'ai raté l'appel de show(). Cette méthode a précédemment lancé un appel à JOptionPane qui à son tour a affiché un JDialog et a été supprimé lors du refactoring. Mais comme la classe étend maintenant JDialog, l'appel de show() le rend réellement visible. 25 févr.. 092009-02-25 20:56:55