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 :

[JLabel] Rendre sélectionnable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 82
    Par défaut [JLabel] Rendre sélectionnable
    bonjour,

    je voudrais savoir comment faire pour que mes JLabels soient selectionnables.
    Autrement dit, quel evenement leur associer pour qu'ils changent de couleur de fond par exemple si l'utilisateur clic dessus?
    est ce faisable ou dois je passer par un autre composant?
    sachant que mes JLabels sont composes d'un texte et d'un icone

    merci d'avance!

  2. #2
    Membre chevronné Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 457
    Par défaut Re: [Swing] JLabel sélectionnable
    Citation Envoyé par tomburn
    bonjour,
    Autrement dit, quel evenement leur associer pour qu'ils changent de couleur de fond par exemple si l'utilisateur clic dessus?
    Ca s'appelle un bouton .

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    La classe JLabel étends indirectement la class Component, qui a comme méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addMouseListener( MouseListener ml );
    Regarde l'interface MouseListener, je pense que tu vas trouver ton bonheur...


    Un petit example :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    JLabel label = ...
     
    boolean enRouge = false ;
     
     
    label.addMouseListener( new MouseAdapter()
    {
    public void mouseClicked( MouseEvent mouseEvent )
    {
     changeColorLabel();
    }
    }
     
    );
    et la fonction changeColorLabel() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void changeColorLabel()
    {
     if( enRouge )
     {
    enRouge = false ;
    label.setBackground( Color.blue );
     }
    else
    {
    enRouge = true ;
    label.setBackground( Color.red );
    }
     
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 82
    Par défaut
    ok merci je vais regarder ca.
    (et je ne pense qu'1 bouton soit utilisable pour ce que je veux faire )

    sinon question subsidiaire:
    suis-je oblige de faire le "addMouseListener" en dehors de ma classe?
    en fait j'ai créé une classe dérivant de JLabel, et j'aimerai qu'elle se debrouille toute seule pour savoir si on lui clic dessus.

    merci d'avance!

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    Ben non, ya pas de probleme...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 82
    Par défaut
    je veux dire:
    comment je fais, dans ma classe, pour mettre mon "addMouseListener"?
    dans le constructeur?

    je veux pouvoir creer ces composants et les ajouter dans un JPanel sans avoir a mettre a chaque fois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    machin.addMouseListener(new MouseEvent...) 
    ...
    je sais pas si je suis tres clair...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    Exemple :


    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
    class myLabel extends JLabel
    {
     
    myLabel()
    {
     super("coucou" );
     
     this.addMouseListener()
     {
     ...
     }
    }
     
    public void colorLabelChanged()
    {
     this.setColorBackground( ... );
    }
     
     
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 82
    Par défaut
    je suis desole mais ca marche pas ca...

    sinon je pense avoir trouve une autre solution, mais a essayer:
    c le JPanel qui va ecouter les evenements souris, et lors d'un clic on peut recuperer le composant cliqué avec getSource() ou getComponent() peut etre, et ainsi appliquer ce que l'on veut dessus.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 17
    Par défaut
    En quel honneur ça marcherait pas ?
    Le squelette de code de thomas_strass marche bien, tu l'as surement mal complété...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 82
    Par défaut
    voila mon code:
    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
     
    public class Node extends JLabel {
    	boolean enRouge;
     
    	public Node(String arg0, Icon arg1) {
    	   super(arg0, arg1, JLabel.CENTER);
    	   this.setVerticalTextPosition(JLabel.CENTER);
               this.setHorizontalTextPosition(JLabel.TRAILING);
               this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
     
               enRouge = false ;
     
               this.addMouseListener( new MouseAdapter()
               {
                 public void mouseClicked( MouseEvent mouseEvent )
                 {
                    changeColorLabel();
                  } 
                }
                ); 
    	}
     
     
     
    	public void changeColorLabel()
    	{
    		if( enRouge )
    		{
    			enRouge = false ;
    			this.setBackground( Color.blue );
    		}
    		else
    		{
    			enRouge = true ;
    			this.setBackground( Color.red );
    		}
    	}
    j'ajoute ensuite mes Node dans un JPanel, et quand je clic dessus ils ne changent pas de couleur...
    j'ai oublié qq chose?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    Mon code marche tres bien, merci. A mon avis, tas oublie de dire au label d'être opaque ( ci que fera kil coloriera bien son background ).

    Tiens, le code : ( jai essaye avant de le filer ) :


    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
    import java.awt.*;
    import java.awt.event.*;
     
    import javax.swing.*;
     
     
    public class monLabel extends JLabel
    {
     
    boolean isSelected = false ;
     
    static final private Color ColorUsual = Color.WHITE ;
    static final private Color ColorSelected = Color.RED ;
     
      public monLabel( String title )
      {
        super( title );
     
         this.setOpaque( true );
     
        this.setBackground( ColorUsual );
     
        this.addMouseListener(new MouseAdapter()
        {
        public void mouseClicked( MouseEvent mouseEvent )
        {
          System.out.println("color changed");
          makeColorChanged();
        }
        });
      }
     
    public void makeColorChanged()
    {
      if( isSelected ) 
      {
        isSelected = false ;
        this.setBackground( ColorUsual );
     
      }
      else
      {
        isSelected = true ;
        this.setBackground( ColorSelected );
      }
    }
     
     
    static public void main( String[] args )
    {
      JFrame frame = new JFrame("Coucou frame");
     
      frame.getContentPane().setLayout( new BorderLayout() );
      frame.getContentPane().add( new monLabel("coucou" ), BorderLayout.CENTER );
     
      frame.setSize( 300, 300 );
     
      frame.addWindowListener(new WindowAdapter() 
      {
        public void windowClosing(WindowEvent windowEvent)
        {
          System.exit(1);
        }
     
     
      });
     
      frame.setVisible( true );
     
    }
     
    }

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 82
    Par défaut
    ok merci c'etait bien le setOpaque() visiblement.

    je suis honteux

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    Mets juste le tag Résolu pour clore le sujet, merci. A moins que t'ais d'autres questions ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 82
    Par défaut
    c bon.

    merci pour votre aide!

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/07/2007, 12h01
  2. Rendre une option d'un menu non sélectionnable
    Par zoziobibe dans le forum Visual C++
    Réponses: 5
    Dernier message: 28/08/2006, 07h14
  3. Réponses: 2
    Dernier message: 26/07/2006, 12h32
  4. Réponses: 24
    Dernier message: 08/05/2006, 16h40
  5. [Débutant]RichEdit => Rendre le texte non sélectionnable
    Par Runlevel dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/12/2004, 23h47

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