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

AWT/Swing Java Discussion :

Comment trouver le nom d'une instance.


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 41
    Points : 39
    Points
    39
    Par défaut Comment trouver le nom d'une instance.
    Bonjour,

    Ma question peut paraître un peu triviale, mais ce n'est pas aussi simple (pour moi).


    Pour que les utilisateurs puissent personnaliser leurs écrans, en particulier les couleurs d'une case à cocher j'ai surchargé a classe JCheckBox.
    Il suffira de cliquer avec le bouton droit de la souris pour entrer dans un dialogue pour choisir les couleurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      public class MaCheckBox  extends  JCheckBox. 
      {
            .... 
      }
    Par ailleurs j'ai développé une classe JFrame qui ajoute la classe ci-dessus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      public class GGTest extends  JFrame
      {
               JPanel panneau = new JPanel 
               MaCheckBox   nom = new  MaCheckBox();
               nom.setName(nom); 
               nom.setBounds(.... );
            .... 
              panneau.add(nom);
      }


    Cela marche très bien les couleurs des fond et texte sont bien modifiées. Par contre pour pouvoir sauvegarder les couleurs dans une base de données (et les retrouver lors du rechargement de la classe) , j'ai besoin de récupérer dans la classe MaCheckBox le nom de ma JFrame.

    J'ai essayé avec une boucle en utilisant getParent() et getClass.getName() mais sans succès .

    Si vous avez une solution, merci d'avance.

    Gérard

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 086
    Points : 8 004
    Points
    8 004
    Par défaut
    Le setname se fait sur la checkbox, pas sur la jframe parente. Donc avoir le name de la jframe... ben c'est pas possible.
    Rajoute un nom sur la jframe, tu pourras alors dire que pour un jframe avec un nom, tu pourras récuperer le nom des checkbox qui appartiennent a celle ci.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 41
    Points : 39
    Points
    39
    Par défaut
    Bonsoir,


    Enfin ! je suis arrivé à faire ce que voulais (Mon grand-père disait : "A l'impossible nul n'est tenu").
    J'ai développé une méthode que j'ai appelée "filliation" qui permet de remonter toute la généalogie d'un élément., à condition que la JFrame ait été déjà affichée (ce qui est une évidence si l'on doit cliquer sur la checkbox pour changer les couleurs. );
    Par exemple : supposons une case à cocher définie dans un JPanel, ceci-ci dans un autre JPanel, et ainsi de suite, jusqu'à la JFrame.
    Ma méthode renverra une chaine, chaque nom étant séparé par un point.Par exemple : "MaFrame.monPaneau1.monPanneau2. ...."

    Et ceci pas uniquement pour la Check Box. J'ai fait l'essai avec d'autres composants surchargés : (JRadioButton, JLIst, JPanel etc).

    Il n'y a qu'un seul impératif : Donner un nom "setName()" à chaque composant.

    Au cas où certains seraient intéressés voici ci_dessous comment j'ai fait. Sans doute n'ai je pas codé dans "l'état de l'art", mais cela a la mérite de marcher.


    D'abord ma méthode statique que j'ai incorporée dans une classe commune à plusieurs programmes.

    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
     
    public class common
    {
       ..... 
            public static String filiation(Component c)
    	{
    		if (c==null) return null; 
    		String  prefixe =  c.getName() 
    		if ( prefixe == null || prefixe.trim().equals("")) return null;   //  composant pas nommé. 
    		while (true)
    		{
    			    c = c.getParent();
    			    if (c==null) break;
    			    String w = c.getName();
    			    if (w==null) continue;
    			    if (w.startsWith("null.")) break;
    		            if (w.equals("JFrameContentPane"))  break;
    		            if (w.equalsIgnoreCase("MonPanneau"))  break;
    		            prefixe = w + "." + prefixe;
    		}
    		return prefixe;
    	}
    Maintenant mon programme principal. évidemment je n'ai pas défini ici toutes les caractéristiques des différents composants.

    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
     
      public class GGTest extends  JFrame
      {
               this.setName("GGTest");
                   .......
               JPanel pan1 = new JPanel(); 
                     pan1. setName("Pan1");
               JPanel pan2 = new JPanel(); 
                   pan2. setName("Pan2");
               JPanel pan3 = new JPanel(); 
                   pan3. setName("Pan3");
               MaCheckBox   nom = new  MaCheckBox();
                      nom.setName("nom"); 
                      nom.setBounds(.... );
            .... 
              pan3.add(nom);
              pan2.add(pan3);
              pan1.add(pan2);
              th1s.add(pan1);
            .... 
        }
    Enfin la Check Box surchargée

    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
     
       public class MaCheckBox  extends  JCheckBox. 
      {
            private void initialisation 
            {
                    // lire la base de données pour retrouver éventuellement  les couleurs de ce composant
                      this.setBackground.....
                      this.setForeground.....
     
                    // avec un clic droit  de la souris  suere ce composant j'exécute la méthode "traiter()"
                    this.addMouseListener(new MouseAdapter() 
    		{
    			public void mousePressed(MouseEvent e)	{traiter(e);}
    		});
             }
     
            private boolean traiter (MouseEvent e)
            {
                       //  l'utilisateur choisit ses couleurs 
                       //   Color b = couleur du fond
                       //   Color f  =couleur du texte.
                          ........ 
                          ........  
                      Component c = this;
                      String liste = Common.filiation(c)  
     
     // Liste contient le String :    GGTest.pan1.pan2.pan3 
     
                      if( liste.equals("")) return false;  //  
                      String[] tab = liste.split(".");
                      String maFrameName = tab[0]; // je retrouve le nom "GGTest"
     
                     Je sauve toutes mes infos dans une base de données
                           ........ 
                          ........  
                    return true;
             }
      }

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 41
    Points : 39
    Points
    39
    Par défaut
    Bien que ce que je viens de donner comme solution fonctionne très bien, je me suis aperçu en réfléchissant plus intensément que j'avais construit une"usine à gaz" en surchargeant la classe JCheckBox. J'ai depuis réalisé ce que je souhaitais de façon beaucoup plus simple.
    Donc merci d'ignorer tout ce que j'ai précédemment écrit avec toutes mes excuses.

    Gérard

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/01/2009, 11h43
  2. Réponses: 6
    Dernier message: 22/05/2006, 15h36
  3. Réponses: 6
    Dernier message: 12/05/2006, 16h20
  4. comment modifier le nom d'une colonne via VBA?
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 24/11/2005, 16h36
  5. Réponses: 4
    Dernier message: 09/11/2005, 18h11

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