bonjour,

je travaille avec swing, sur une interface graphique pour faire un petit logiciel de schéma électrique.

L'objet contenant est de type JPanel, nommé "g1", qui contient mes composants perso.

L'aspect est le suivant :
Nom : interface 02 02 2022.png
Affichages : 142
Taille : 13,5 Ko


Au re-dimensionnement de la fenêtre par l'utilisateur, les postions des objets sont re-calculés pour que les écarts soient à nouveau égaux et que la présentation soit maintenue. Cela fonctionne grâce à une fonction "actualiser(size), qui, dans le paintComponent de g1, recalcule les positions avec comme argument la taille actuelle du JPanel g1.

Cependant, j'ai besoin également des ratios de redimensionnement, nommés rx et ry, pour recalculer les longueurs de chaque morceau de fil.
Pour cela j'ai ajouter ce code dans la paintComponent de mon objet g1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//		 MON PAINTCOMPONENT(Graphics g) 
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D)g;
		System.out.println();
		System.out.println("---------------------j'entre dans le paintComponent_MaGrille----------------------------");
 
		System.out.println(" A L'entrée de PAINTCOMPNENT,     this.getSize = "+ this.getSize() + "    et g1_Actual_Size = " + g1_Actual_Size);
 
 
		// Si la grille a été redimensionnée, on attend que les dimensions soient stabilisées pour actualiser les nouvelles positions des objets.
		if (!this.getSize().equals(g1_Actual_Size)) {
			System.out.println(" à l'entrée du IF,       this.getSize = "+ this.getSize() + "    et g1_Actual_Size = " + g1_Actual_Size);
 
				// tant que les dimensions varient, on temporise...
				while (!this.getSize().equals(g1_Actual_Size)) {
					System.out.println(" à l'entrée du WHILE DIFFERENT,       this.getSize = "+ this.getSize() + "    et g1_Actual_Size = " + g1_Actual_Size);
 
						try { // Actualiser la taille et attendre 3s
							System.out.println();
							System.out.println("Avant la TEMPO,       this.getSize = "+ this.getSize() + "    et g1_Actual_Size = " + g1_Actual_Size);
								g1_Actual_Size = this.getSize();
							Thread.sleep(300);
							System.out.println("APRES la TEMPO,       this.getSize = "+ this.getSize() + "    et g1_Actual_Size = " + g1_Actual_Size);
							System.out.println();
 
						} 
						catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						finally { System.out.println("FINALLY");
						}
				}// fin du "while"
 
				// quand la taille est stabilisée on appelle le redimensionnement...		
					float ratioX = (float) g1_Actual_Size.width / g1_Old_Size.width;
					float ratioY = (float) g1_Actual_Size.height/ g1_Old_Size.height;
					System.out.println(" dans paintComponent on est sorti du while, nouveau rx=" + ratioX + "  nouveau ry=" + ratioY);
					g1_Old_Size = g1_Actual_Size;
					actualiser (g1_Actual_Size);	
					Redim_fils.redim_fil3(ratioY);
 
 
 
		}// fin du if changement de dimension
La console affiche :
Nom : console_redim.png
Affichages : 125
Taille : 273,9 Ko

Principe : je teste si on est dans le paintComponent à cause d'un redimensionnement de g1. Si c'est le cas, on teste toutes les 300ms, si la taille est stabilisée, et sinon, on boucle. Si la taille ne change plus, on sort et on peut poursuivre et recalculer une seule fois, les nouveaux ratios rx et ry.

Problème : A la moindre variation de dimension on entre bien dans ce code, mais on sort chaque fois, même si la taille continue à évoluer.
En effet, apparemment, dans le try, j'utilise le "getSize() au début, puis après 300ms, pendant que les dimensions continuent à évoluer, mais le résultat semble identique, alors forcement, je sors du "while"...

Question : pourquoi, alors que les dimensions ne sont pas stabilisées, le test "getSize()", avec 300ms d'attente reste identique et provoque ma sortie de la bouche "while"??

Merci à tous pour vos éventuelles lumières......