Bonjour,

Je cherche actuellement à raffraichir tous les composants de mon application sur commande. En, effet je change la taille de font de tous mes composants et cela ne se fait pas en directe. Pire, il faut cliquer sur un panel pour le forcer à se redessiner, et à l'intérieur de lui même, seulement une partie des composants se rafraichit !!

Voici la procédure que j'utilise actuellement et j'aurais voulu savoir si vous connaissiez un autre moyen de parcourir tous les éléments. De plus, repaint() seul ne fonction pas, il est nécessaire de faire appel à un revalidate() mais cela ne marche que pour les JComponents, pour le reste, comment faire ?

Voici mon bout de code qui est appelé lorsque je change la taille de font global de l'application :
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
47
48
49
50
51
52
53
54
 
private static void changeFont(int size) {
		if (size < MIN_SIZE_FONT) {
			size = MIN_SIZE_FONT;
		}
 
		displayProperties(size);
		refreshAllComp(frame);
	}
 
	private static void refreshAllComp(Component component) {
		if (null == component) {
			return;
		}
 
		System.out.println("la classe du composant est "  + component.getClass());
 
		if (component instanceof JComponent) {
			System.out.println(" 1 la classe du composant est "  + component.getClass());
			JComponent comp = (JComponent) component;
 
 
			if (null != comp.getComponents()) {
				for (Component c : comp.getComponents()) {
					refreshAllComp(c);
				}
			}						
			refreshComponent(comp);
		} else if (component instanceof Container) {
			System.out.println(" 2 la classe du composant est "  + component.getClass());
			Container container = (Container) component;
			if (null != container.getComponents()) {
				for (Component comp : container.getComponents()) {
					refreshAllComp(comp);
				}
			}
			refreshComponent(component);
		}		
 
	}
 
	private static void displayProperties(int size) {
		Enumeration<Object> e = UIManager.getDefaults().keys();
		while (e.hasMoreElements()) {
			String key = e.nextElement().toString();
			if (key.endsWith(".font")) {
				putFont(key, size);
			}
		}
	}
 
	private static void putFont(String name, int size) {
		UIManager.put(name, Font.decode(IFIELD_FONT + size));
	}