IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[debutant]Liste des objets créés (exemple JToolbar)


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut [debutant]Liste des objets créés (exemple JToolbar)
    Je créé plusieurs JToolbar ( JToolbar t1 = new JToolbar(); JToolbar t2 = new JToolbar(); etc ... ) et à un moment je souhaite les masquer tous.

    Comment balayer la liste de tous les 'JToobars' créés ( à différent endroits du code) sans les appeller un par un par leur nom pour appliquer la méthode hide() ?

    Merci de votre aide.
    Ami

  2. #2
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    crer un array de JToolBar?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    JToolBar[] myToolbars = new JTooBar[3];
     
    myToolbars[0] = new JToolBar();
    myToolbars[1] = new JToolBar();
    myToolbars[2] = new JToolBar();
     
    ... ... ... 
     
    for (int i = 0; i < myToolbars.length; i++) {
          myToolbars[i].setVisible(false);
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    Merci pour cette solution. Mais je ne peux pas modifier le code du reste de l'appli. J'aimerais trouver une solution du genre :

    Enumeration e = ?????.("JToolbar");

    Ca existe ?
    Alban

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 53
    Par défaut
    Utilise un Vector().

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    Vector() ? Avec un exemple ? Merci.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 53
    Par défaut
    Vector vect = new Vector()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    vect.add(new JToolBar());
    vect.add(new JToolBar());
    vect.add(new JToolBar());
    ....
     
    for (Enumeration e = v.elements() ; e.hasMoreElements() ;) {
             ((JToolBar)(e.nextElement())).setVisible(false);
    }
    normalement comme ça, ça doit marcher, teste et tiens moi au courant.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 53
    Par défaut
    c de la merde ces smiley fais attention avec les ) et ; ça donne des simleys dans mon message

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    Merci pour l'exemple.

    je reste quand même sur ma faim !

    Je reste toujours à la recherche d'une méthode qui ressemble plus à (Vector/Enumeration/List) e = METHODE_QUI_RETOURNE_LA_LISTE_DES_OBJETS_DE_TYPE.("JToolbar");

    Ami

  9. #9
    Membre éclairé Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    METHODE_QUI_RETOURNE_LA_LISTE_DES_OBJETS_DE_TYPE.("JToolbar");
    Peut-être avec l'API de réflection.
    http://java.sun.com/docs/books/tutor...ass/index.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Tu listes tous les champs de ta classe. (1)
    for(int i=0;i<fields.length;i++)
    if(fields[i] instanceof JToolbar)
    fields[i].setVisible(false);
    (1) http://java.sun.com/j2se/1.5.0/docs/...tml#getFields()

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    Pour mieux comprendre la reflection, j'ai trouvé ce lien : http://www.onjava.com/pub/a/onjava/2...eflection.html

    Merci
    Ami

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    J'arrive maintenant à lister tous les JToolBar ... mais comme tout debutant en java, je bute sur un problème : je n'arrive pas à pointer sur le 'JToolBar' à partir d'un 'Field' et lui appliquer la méthode .hide()

    Merci
    Ami

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    final Field fields[] = CLASS_OU_SONT_CREER_DES_JTOOLBARS.class.getFields();
    for ( int i=0; i< fields.length;i++)
    {
    	Field varField = fields[i];
    	if ( varField.getType().equals(javax.swing.JToolBar.class) ) 
    	{
    		System.out.println("Jtoolbar trouvé");
    		// COMMENT ACCEDER AU JTOOBAR ET LE MASQUER ?
    		????.hide()
    	}
    }

  12. #12
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Bonjour

    Ben là avec tes variables Field c'est tout simplement impossible (à ma connaissance)...
    De plus je ne pense pas que vouloir cacher tes JToolBar de cette manière soit judicieuse. Ta classe possèdant les JToolBar est certainement la plus appropriée pour cette opération (vu que c'est elle qui dispose de toutes les infos pour le faire)...

    Pourquoi ne pas ajouter une méthode cacherToolBar dans la classe ? Tu peux pour cela utiliser les méthodes données précédemment.

    M'enfin...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    L'exemple avec JToolbar n'est qu'un prétexte. Imagine un JPane ou une autre class qui te conviendrait.

    Je cherche comment faire ceci car j'y arrive avec C++/QT. Donc, je me dit toujours bêtement que c'est possible sous java ...

    Ca serait dommage de ne pas y arriver alors que nous sommes si prêt du but.

    Ami

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut merci
    J'ai retenu la proposition de cedseat.
    Merci encore pour vos réponses.
    Ami

  15. #15
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    c'est possible, mais on ne peut pas coder pas en java comme on peut le faire en C++ : le compilateur est moins permissif.

    En gros, ce que tu cherche à faire, c'est crade ; et les solutions qui t'on été proposées, elles, sont propres.

    Pour le code avec le Vector, je te conseille très fortement de le typer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Vector<JToolBar> vect = new Vector<JToolBar>();
    vect.addElement(new JToolBar());
    vect.addElement(new JToolBar());
    vect.addElement(new JToolBar());
     
    for (int i=0 ; i< vect.size() ; i++) {
             vect.elementAt(i).hide();
    }

  16. #16
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    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
     
        public Enumeration<Component> METHODE_QUI_RETOURNE_LA_LISTE_DES_OBJETS_DE_TYPE(String className) {
            if (className == null) {
                throw new IllegalArgumentException("I need a className to do my job correctly...");
            }
     
            Component components[] = /* myFrame. */ getContentPane().getComponents(); // what if ... 
     
            HashSet<Component> hashSet = new HashSet<Component>();
            for (Component component : components) {    
                if (className.equals(component.getClass().getName())) {
                    hashSet.add(component);
                }
            }
     
            return enumeration(hashSet);
        }
    quelque chose comme ca devrais marcher.
    mais tu dois dire comme parametre javax.swing.JToolBar et pas seulement JToolBar

    je te deconseille quand meme de faire des truc comme ca.

  17. #17
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    ptite question à la con bbclone : qu'est-ce qu'il se passe si tes JToolBar sont déclarées dans ta JFrame mais posées dans des Container eux-mêmes posés dans ton ContentPane ? (des JInternalFrame par exemple ....)

    t'as pas prévu 1 cas récursif ? ça serait plus juste pourtant ....
    Dans ce cas : si le Component listé est 1 instance of Container -> rappeler la méthode de recherche sur les Component qu'il contient ...

    Au moins, tu te retrouve avec tous les objets posés dans le ContentPane, quel que soit son niveau ... nan ?

  18. #18
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    tu as vu j'avai mis dans le commentaire en haut dans le code
    // what if ...

    j'avais penser a ce cas mais comme c'est pas bien de faire ca... j'ai preferer pas le faire.

    on doit appliquer recursivment cette methode sur chacun des composant ton JLayeredPane (qui est dans ton JRootPane de ta fenetre principale).
    Une petite remarque, les JIntenalFrame sont fait pour etre ajouter dans des JLayeredPane (un niveau au dessu du contentPane si tu veux).
    alors si tu applique la methode que je decris la ca doit marcher meme avec des JInternalFrame

    parce que tu peut aussi par exemple mettre une toolBar dans un JLabel un JComboBox ou dans ton JMenuBar

    c'est aussi pour ca que j'ai pas fait un exemple complette

  19. #19
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    au temps pour moi, je ne savais pas que les JLayeredPane étaient un niveau au dessu du contentPane ....

    ma ma remarque n'en est pas moins valable :p.

  20. #20
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    je vient de le tester :-)
    ca marche ca ;-)
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.HeadlessException;
    import java.awt.Insets;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Random;
     
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JSpinner;
    import javax.swing.JTextField;
    import javax.swing.JToolBar;
    import javax.swing.SwingUtilities;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     * Date: 17-Jun-2006
     * Time: 20:15:38
     * To change this template use File | Settings | File Templates.
     */
    public class ListElements extends JFrame {
     
        Random r = new Random();
     
        public ListElements() throws HeadlessException {
     
            JToolBar[] toolBars = new JToolBar[10];
            int orientation = 0;
            for (int i = 0; i < 10; i++) {
                toolBars[i] = new JToolBar(orientation++ % 2);
                JComponent aComponent = null;
                int rnd;
                for (int j = 0; j < 3; j++) {
                    rnd = r.nextInt(5);
                    System.out.println(rnd);
                    switch (rnd) {
                        case 0:
                            aComponent = new JButton(String.valueOf(i));
                            break;
                        case 1:
                            aComponent = new JLabel(String.valueOf(i));
                            break;
                        case 2:
                            aComponent = new JComboBox(new Object[]{i});
                            break;
                        case 3:
                            aComponent = new JTextField(String.valueOf(i));
                            break;
                        case 4:
                            aComponent = new JSpinner();
                            break;
                    }
                    toolBars[i].add(aComponent);
                }
            }
     
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.insets = new Insets(5, 5, 5, 5);
            gbc.gridx = GridBagConstraints.REMAINDER;
     
            for (int i = 0; i < 10; i++) {
                add(toolBars[i], gbc);
            }
        }
     
        public Collection<Component> getComponents(String className, Container aContainer) {
            if (className == null || aContainer == null) {
                throw new IllegalArgumentException("I need a className to do my job correctly...");
            }
     
            ArrayList<Component> a = new ArrayList<Component>();
            Component[] components = aContainer.getComponents();
     
            for (Component c : components) {
                if (c != null) {
                    if (className.equals(c.getClass().getName())) {
                        a.add(c);
                    } else if (c instanceof Container) {
                        Container aSubContainer = (Container) c;
                        a.addAll(getComponents(className, aSubContainer));
                    }
                }
            }
            return a;
        }
     
        public static void print(Collection<Component> c) {
            if (c.size() == 0) {
                System.out.println("empty collection");
                return;
            }
            for (Object o : c) {
                System.out.println(o);
            }
        }
     
        public static void main(String[] args) {
            Runnable runnable = new Runnable() {
                public void run() {
                    ListElements l = new ListElements();
                    l.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    l.setSize(540, 400);
                    l.setLocationRelativeTo(null);
                    l.setVisible(true);
     
                    Collection<Component> c = l.getComponents("javax.swing.JToolBar", l.getRootPane());
                    print(c);
     
                    c = l.getComponents("javax.swing.JButton", l.getRootPane());
                    print(c);
     
                    c = l.getComponents("javax.swing.JLabel", l.getRootPane());
                    print(c);
     
                    c = l.getComponents("javax.swing.JComboBox", l.getRootPane());
                    print(c);
     
                    c = l.getComponents("javax.swing.JMyComponent", l.getRootPane());
                    print(c);
     
                }
            };
            SwingUtilities.invokeLater(runnable);
        }
    }

    la j'ai utiliser le JRootPane.
    En codant je me suis dit et si il rajoute des Component dans le glassPane aussi?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. LIste des objets créés en Java
    Par apqmwnqmap dans le forum Général Java
    Réponses: 1
    Dernier message: 17/10/2008, 17h45
  2. [Debutant] Stocker des objets dans un tableau à plusieurs indices
    Par Invité dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 27/09/2006, 18h04
  3. Réponses: 1
    Dernier message: 13/09/2006, 11h50
  4. Réponses: 9
    Dernier message: 31/05/2006, 11h56
  5. OpenDialog : augmenter la liste des objets affichés
    Par cybersam dans le forum C++Builder
    Réponses: 8
    Dernier message: 16/05/2006, 17h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo