Bonjour,

J'ai un soucis de perte de référence avec un JComponent. J'ai créé une méthode de recherche récursive d'un JComponent dans un parent à partir de son nom. La voici :

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
private void getComponent(String compName, JComponent parent, JComponent retComp) {
	System.out.println("Entering : " + parent.getClass().toString() + " " + (retComp != null ? retComp : "null"));
	if (parent instanceof JPanel) {
		for (Component child : parent.getComponents()) {
			String name = child.getName() == null ? "" : child.getName();
			if (name.equalsIgnoreCase(compName)) {
				retComp = (JComponent)child;
				break;
			}
			else {
				getComponent(compName, (JComponent)child, retComp);
			}
		}
	}		
	System.out.println("Exiting : " + parent.getClass().toString() + " " + (retComp != null ? retComp : "null"));
}
Dans les traces, je vois bien mon composant trouvé mais il vaut null à l'extérieur de la méthode :

10:12:02.514 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.515 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.515 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.515 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.515 Last Message repeated 1 times
10:12:02.515 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.515 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.515 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.516 AWT-EventQueue-0 Entering : class javax.swing.JButton null
10:12:02.516 AWT-EventQueue-0 Exiting : class javax.swing.JButton null
10:12:02.516 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.516 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.516 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.516 AWT-EventQueue-0 Entering : class luxor.swing.input.XLabel$1 null
10:12:02.516 AWT-EventQueue-0 Exiting : class luxor.swing.input.XLabel$1 null
10:12:02.517 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.517 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.517 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.517 AWT-EventQueue-0 Entering : class javax.swing.JButton null
10:12:02.517 AWT-EventQueue-0 Exiting : class javax.swing.JButton null
10:12:02.517 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.517 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.518 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.518 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.518 Last Message repeated 1 times
10:12:02.518 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.518 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.518 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.518 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.518 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.519 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.519 Last Message repeated 2 times
10:12:02.519 AWT-EventQueue-0 Entering : class javax.swing.JComboBox null
10:12:02.519 AWT-EventQueue-0 Exiting : class javax.swing.JComboBox null
10:12:02.519 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.519 Last Message repeated 1 times
10:12:02.519 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.519 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.520 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.520 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.520 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.520 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.520 AWT-EventQueue-0 Entering : class javax.swing.JButton null
10:12:02.520 AWT-EventQueue-0 Exiting : class javax.swing.JButton null
10:12:02.520 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.520 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.521 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.521 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.521 AWT-EventQueue-0 Entering : class javax.swing.JButton null
10:12:02.521 AWT-EventQueue-0 Exiting : class javax.swing.JButton null
10:12:02.521 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.521 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.521 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.521 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.522 AWT-EventQueue-0 Entering : class javax.swing.JButton null
10:12:02.522 AWT-EventQueue-0 Exiting : class javax.swing.JButton null
10:12:02.522 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.522 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.522 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.522 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.522 Last Message repeated 1 times
10:12:02.522 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.523 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.523 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.523 Last Message repeated 1 times
10:12:02.523 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.523 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.523 AWT-EventQueue-0 Entering : class javax.swing.JPanel null
10:12:02.523 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.523 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.524 AWT-EventQueue-0 Entering : class javax.swing.JButton null
10:12:02.524 AWT-EventQueue-0 Exiting : class javax.swing.JButton null
10:12:02.524 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.524 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.524 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.524 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.524 Last Message repeated 1 times
10:12:02.524 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.525 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.525 AWT-EventQueue-0 Exiting : class javax.swing.JPanel null
10:12:02.525 AWT-EventQueue-0 Entering : class javax.swing.JLabel null
10:12:02.525 AWT-EventQueue-0 Exiting : class javax.swing.JLabel null
10:12:02.525 AWT-EventQueue-0 Exiting : class javax.swing.JPanel javax.swing.JPanel[sectorsBox,0,0,-1x-1,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@b55e35a,flags=9,maximumSize=java.awt.Dimension[width=2147483647,height=1073741823],minimumSize=java.awt.Dimension[width=144,height=140],preferredSize=java.awt.Dimension[width=515,height=450]]
Qu'est-ce qui m'échappe ?