J'ai écrit une classe MnemonicsBuilder pour JLabels et AbstractButtons. Je voudrais écrire une méthode pratique setMnemonics(JFrame f)
qui parcourra chaque enfant du JFrame et sélectionnera les JLabels et les AbstractButtons. Comment puis-je avoir accès à tout ce qui est contenu dans le JFrame? J'ai essayé:Itérer/recurcir à travers des conteneurs et des composants pour trouver des objets d'une classe donnée?
LinkedList<JLabel> harvestJLabels(Container c, LinkedList<JLabel> l) {
Component[] components = c.getComponents();
for(Component com : components)
{
if(com instanceof JLabel)
{
l.add((JLabel) com);
} else if(com instanceof Container)
{
l.addAll(harvestJLabels((Container) com, l));
}
}
return l;
}
Dans certaines situations, cela fonctionne très bien. Dans d'autres, il manque de mémoire. A quoi je ne pense pas? Existe-t-il un meilleur moyen de rechercher des composants enfants? Ma récursion est-elle erronée? N'est-ce pas une image de la façon dont les choses "contiennent" d'autres choses dans Swing - par exemple, Swing n'est-il pas un arbre enraciné?
JFrame
|
|\__JMenuBar
| |
| \__JMenu
| |
| \__JMenuItem
|
|\__JPanel
| |
| |\__JButton
| |
| |\__JLabel
| |
| |\__ ... JCheckBoxes, other AbstractButtons, etc.
+1 pour le bel arbre ASCII – justSaid