Bonjour,
Je suis en train de rendre redimensionnable une frame undecorated et je viens d'arriver. Tout marchait très bien, mais je me suis dit que logiquement il fallait faire les appels à setSize et setLocation dans l'EDT. J'ai donc rajouté des SwingUtilities.invokeLater pour les codes intervenant sur l'EDT et après ça ne marche plus correctement, c'est un peu aléatoire...
Par exemple, avec un redimensionnement vers la gauche :
avant :
après :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 final int westMove = origin.x + p.x; final int nextWestWidth = ((int)getSize().getWidth()) - westMove; if ( nextWestWidth > getMinimumSize().getHeight() && nextWestWidth < getMaximumSize().getHeight()){ setSize(nextWestWidth, (int)getSize().getHeight()); setLocation(getLocation().x + westMove, getLocation().y); }
Une fois que j'ai transformé le premier code dans le deuxième j'ai eu des problèmes. Tout ce code est appelé depuis la méthode mouseDragged qui écoute les déplacements souris.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 final int westMove = origin.x + p.x; final int nextWestWidth = ((int)getSize().getWidth()) - westMove; if ( nextWestWidth > getMinimumSize().getHeight() && nextWestWidth < getMaximumSize().getHeight()){ SwingUtilities.invokeLater(new Runnable(){ public void run(){ setSize(nextWestWidth, (int)getSize().getHeight()); setLocation(getLocation().x + westMove, getLocation().y); } }); }
Est-ce que c'est normal ? J'imagine que ça doit à cause de la désynchronisation des actions et de l'interface, j'utilise la valeur de setLocation alors qu'elle a pas encore eu le temps de changer et j'utilise donc une valeur erronée...
Et, est-ce que quelqu'un voit une manière de résoudre le problème en respectant quand même l'EDT ?
![]()
Partager