Lister les composants d'un JPanel

adrienr11vdv Messages postés 99 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 16 avril 2009 - 15 mars 2007 à 10:05
adrienr11vdv Messages postés 99 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 16 avril 2009 - 16 mars 2007 à 11:40
bonjour à tous,
j'aurai voulu savoir si il existait une méthode qui permet de lister les composants d'un JPanel.
J'aimerais pouvoir lister tout les éléments de saisi (c'est à dire tout les éléments qui se nomment jft_..... et cmb_.....)
J'aimerais que cette liste me retourne le nom de l'objet et la valeur.

merci d'avance pour votre aide

13 réponses

super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
15 mars 2007 à 11:33
Yopla,

pour avoir le nom et la valeur il me semble que tu devrais te pencher sur l'introspection. Y a pas mal d exemple sur le net.
pour info le package java.lang.reflect !

++ Toinou
0
adrienr11vdv Messages postés 99 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 16 avril 2009
15 mars 2007 à 13:24
merci pour ce conseil.
en effet , il faut bien utiliser l'introspection.
mais j'ai un problème d'execution de mon code

public
static
void main(String[] args) {
   
try {
         Class c = Class. forName (
"Etiquettes");
         Field[] f = c.getFields();
         System.
out.println(
" essai : " +f.toString());
      }
catch (SecurityException e) {
      }
catch (ClassNotFoundException e) {
      }

}

Lorsque le code s'execute, il ne passe pas dans le try et ne passe pas non plus dans les catchs. lorsque qu'il arrive sur la ligne (Class c = class....), il sort de la méthode static void main

quelqu'un pourrait-il m'aider
merci d'avance
0
adrienr11vdv Messages postés 99 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 16 avril 2009
15 mars 2007 à 13:30
restification!!!


en fait, l'execution du code passe par le second catch (ClassNotFoundException). pourtant ma classe se nomme bien Etiquette!!!

merci d'avance pour votre aide


 
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
15 mars 2007 à 13:57
Yop,

t as pas un pb de package genre Class.forName("com.truc.Etiquettes"); Sinon y a peut etre un pb vu que t utilise ca dans un contexte statique et que ta classe est suremment pas crée.
Bref bosse plutot sur une instance d Etiquette et tu fais un getClass() dessus !
++ Toinou
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 mars 2007 à 14:11
Salut,

pour avoir la liste des composant d'un panelil y a plus simple :

for(Component c : contentPane.getComponents()){
    System.out.println(c);
    if(c instanceof JTextField){
        JTextField txt = (JTextField)c;
        System.out.println("\t" + txt.getText());
    }else if(c instanceof JButton){
        JButton bt = (JButton)c;
        System.out.println("\t" + bt.getText());
    }//.....
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
adrienr11vdv Messages postés 99 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 16 avril 2009
15 mars 2007 à 14:49
un grand merci.


très efficace.


j'ai juste un petit problème le "contentPane" ne passe pas. J'ai une erreur du type "cannot be resolved"

merci d'avance 
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
15 mars 2007 à 14:56
Yopla !!

Bien d accord Twinuts mais pour voir je cite
"les éléments qui se nomment jft_..... et cmb_...."
j pense qu il est bien obligé d introspecter non ??

++ Toinou
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 mars 2007 à 14:57
Salut,

contentPane c'est ton panel (ici c'est juste le nom d'une variable).

exemple :

class MaFrame extends JFrame{
    //on met tout plein de composants
}

...
MaFrame frame = new MaFrame();
JPanel contentPane = (JPanel)frame.getContentPane();
for(Component c : contentPane.getComponents()){
    System.out.println(c);
    if(c instanceof JTextField){
        JTextField txt = (JTextField)c;
        System.out.println("\t" + txt.getText());
    }else if(c instanceof JButton){
        JButton bt = (JButton)c;
        System.out.println("\t" + bt.getText());
    }//.....
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 mars 2007 à 15:13
Pas faut,

mais bon le nom des variables c'est pas le pieds pour les touchers surtout qu'un code java peut etre obfuscé

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
adrienr11vdv Messages postés 99 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 16 avril 2009
15 mars 2007 à 15:24
génial ce code.


Pour le nom des variables, ce n'est pas grave. C'était juste pour différencier les zones de saisies des autre zones. Mais comme on peut spécifier le type d'objet, ca va aller aussi bien.


J'ai encore une dernière question. si les jFormattedTextField et les boutons se trouvent dans une JTabbedPane, est ce possible de dire qu'il commence la recherche après. En fait, j'aimerais que le code cherche les objets dans les feuilles de la JTabbedPane.

merci d'avance


 
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 mars 2007 à 16:21
Salut,

c'est pas plus sorcier.... bon apres si tu veux parser le composant des compostans, etc ... faut changer la méthode pour la rendre récursiv sinon ta pas fini avec les 'if' et les 'for'

public class Test {

    class MaFrame extends JFrame{
        private JTabbedPane pane = new JTabbedPane();
        public MaFrame(){
            for(int i = 0; i < 5; ++i)
                pane.addTab("" + i, new JButton("" + i));
            JPanel p = (JPanel)getContentPane();
            p.add(pane);
           
        }
    }

    public Test(){
        MaFrame frame = new MaFrame();
        JPanel contentPane = (JPanel)frame.getContentPane();
        for(Component c : contentPane.getComponents()){
            if(c instanceof JTabbedPane){
                JTabbedPane pane = (JTabbedPane)c;
                for(Component cpane : pane.getComponents()){
                    System.out.println("\t" + cpane);
                }
            }
           
        }
    }
   
    public static void main(String[] args) {
        new Test();
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
adrienr11vdv Messages postés 99 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 16 avril 2009
16 mars 2007 à 09:10
merci beaucoup.


je vais tester de suite ce fragment de code.


si j'arrive à lister tout les ComboBox et Textbox de chaque JPanel ( 3 au total) du JTabbedPane alors je ne modifierai pas le code.


encore un grand merci
0
adrienr11vdv Messages postés 99 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 16 avril 2009
16 mars 2007 à 11:40
en fait, j'ai voulu modifier le code mais sans succès.


Comme la JTabbedPane contient 3 JPanel, je voudrai donc les Textbox ainsi que les ComboBox contenu dans ces JPanel.


Voici le code que j'ai modifié:



      Etiquettes inst =





new

Etiquettes();








      for

(Component c : inst.getComponents()){            System.



out

.println(c);



            if

(c


instanceof

JTabbedPane){                  JTabbedPane pane = (JTabbedPane)c;



                  if

(c


instanceof

JPanel){                        JPanel panel = (JPanel)pane;



                        for

(Component cpane : panel.getComponents()){                                 System.



out

.println(

"\t"
+cpane);                        }

               }

         }

}

voici l'erreur qu'il me met: "Cannot cast from JTabbedPane to JPanel"

merci d'avance pour votre aide
0
Rejoignez-nous