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

Composants Java Discussion :

Identifier un JLabel parmi plusieurs JLabel


Sujet :

Composants Java

  1. #1
    PIL
    PIL est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Identifier un JLabel parmi plusieurs JLabel
    Bonjour,

    J'ai un tableau de 5 variables que j'utilise pour créer "dynamiquement" 5 JLabel. Je les identifie par la méthode setName() par le libellé "chp" + son index du tableau (ex: "chp3").
    J'essaie ensuite de modifier le JLabel 3 en le récupérant par la méthode getName(), mais ça ne fonctionne pas. Apparemment je récupère toujours le dernier JLabel du tableau (le "chp4").

    Une idée pour récupérer un des JLabel par son identifiant ?
    Merci.
    PIL

    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
     
    import java.awt.EventQueue;
    import java.awt.Font;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
     
    public class Label {
     
    	private JFrame frame;
    	private JLabel lblNewLabel;
     
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					Label window = new Label();
    					window.frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
     
    	public Label() {
    		initialize();
    	}
     
    	private void initialize() {
    		frame = new JFrame();
    		frame.setBounds(100, 100, 450, 300);
    		frame.getContentPane().setLayout(null);
     
    		String[] lesParametres = { "champ0", "champ1", "champ2", "champ3", "champ4" };
     
    		for (int i = 0; i < lesParametres.length; i++) {
    			lblNewLabel = new JLabel(lesParametres[i]);
    			lblNewLabel.setName("chp" + String.valueOf(i));
    			lblNewLabel.setBounds(20, i * 50, 160, 25);
    			frame.getContentPane().add(lblNewLabel);
    		}
     
    		if (lblNewLabel.getName().equals("chp3")) {
    			lblNewLabel.setText("nouveau champ");
    		}
    	}
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ton test étant effectué juste après la boucle, la variable lblNewLabel correspond au dernier JLabel créé dans la boucle, donc "chp4", donc le test est forcément faux.

    Il faudrait plutôt que tu fasses une boucle sur l'ensemble des composants du conteneur, et chercher celui qui correspond au nom voulu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(Component component : frame.getContentPane().getComponents()) {
        if (component.getName().equals("chp3")) {
            JLabel label = (JLabel)component;
            label.setText("nouveau champ");
       }
    }
    Mais le mieux serait d'indexér les composants plutôt que de se fonder sur cet attribut name. Par exemple, on peut indexer par nom (String) dans une Map :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Map<String, JLabel> labels = new HashMap<>();
     
    for (int i = 0; i < lesParametres.length; i++) {
       lblNewLabel = new JLabel(lesParametres[i]);
       //lblNewLabel.setName("chp" + String.valueOf(i));
       labels.put("chp"+i, lblNewLabel);
       lblNewLabel.setBounds(20, i * 50, 160, 25);
       frame.getContentPane().add(lblNewLabel);
    }
     
    labels.get("chp3").setText("nouveau champ");
    Ou par tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    JLabel[] labels = new JLabel[lesParametres.length];
     
    for (int i = 0; i < lesParametres.length; i++) {
       lblNewLabel = new JLabel(lesParametres[i]);
       //lblNewLabel.setName("chp" + String.valueOf(i));
       labels[i]=lblNewLabel;
       lblNewLabel.setBounds(20, i * 50, 160, 25);
       frame.getContentPane().add(lblNewLabel);
    }
     
    labels[3].setText("nouveau champ");
    Eventuellement, si tu as besoin d'accèder à labels dans différentes méthodes, tu peux en faire une variable de classe.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    PIL
    PIL est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Je fais déjà avec Component mais je trouve cela "lourd" de parcourir tous les composants, car j'en ai d'autres dans mon application.
    Je pensais qu'il existait un moyen de récupérer par l'intermédiaire de l'attribut name, qui pour moi sert d'identifiant.
    Cependant, je prends la solution de la Map qui me semble plus pratique.
    Merci beaucoup pour ta réponse et tes exemples.

    PIL

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

Discussions similaires

  1. Comment parcourir plusieurs JLabel[]?
    Par katebe dans le forum Général Java
    Réponses: 6
    Dernier message: 05/02/2008, 21h03
  2. [JLabel] Afficher un JLabel vertical
    Par GENERYS dans le forum Composants
    Réponses: 4
    Dernier message: 03/10/2005, 11h36
  3. Sélection d'enregistrement parmis plusieurs identiques
    Par monnoliv dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 24/09/2005, 15h32
  4. Réponses: 2
    Dernier message: 24/08/2005, 10h59
  5. sélection d'un max parmi plusieurs champs
    Par invitésuprise dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/08/2005, 13h49

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