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 :

JLabel avec le texte sélectionnable


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut JLabel avec le texte sélectionnable
    Bonjour,

    je souhaite me créer un composant, dérivé d'un JLabel, qui permettrait en plus des fonctionnalités du JLabel, de sélectionner avec la souris le texte affiché par le composant et d'envoyer le texte dans le presse-papier lors d'un "Ctrl-C"...

    Auriez-vous une idée comment je pourrais faire çà ?

    Je n'ai pas réussi à aller plus loin dans l'écriture de ma classe. :-( :-(
    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
     
    public monJLabel extends JLabel implements CaretListener {
         private static final long serialVersionUID = 0L;
     
         // Positions des caractères sélectionnés
         private int positionDebut = -1;
         private int positionFin = -1;
     
         public monJLabel() {
              super();
     
              // this.addMouseListener();
         }
     
         public void caretUpdate(CaretEvent e) {
              positionDebut = e.getDot();
              positionFin = e.getMark();
              repaint();
         }
    }

    En implémentant l'interface CaretListener, je pourrais détecter la sélection des caractères de mon label mais je ne vois pas bien comment je pourrais colorier uniquement le fond des caractères sélectionnés.

    Je pourrais évidement redéfinir paintComponent() en décidant de colorier le fond des caractères sélectionnés, mais comment puis-je faire cela ?
    Comment puis-je détecter le "Rectangle" d'un caractère ?

    Avez-vous une idée ?

    Merci beaucoup pour votre aide.
    F.

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    À partir de n'importe quel JTextComponent, c'est super-simple. À partir d'un JLabel, super-compliqué. Alors à toi de voir.

  3. #3
    Membre actif Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Points : 227
    Points
    227
    Par défaut
    Il te suffit de mettre des JTextField sans border et pas éditable. On dirait un JLabel mais tu peux sélectionner le texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JTextField tf = new JTextField("coucou");
    tf.setEditable(false);
    tf.setBorder(null);

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    Merci pour ta réponse.

    J'ai bien pensé à cette solution mais on perd les avantages de l'utilisation d'un JLabel à savoir l'utilisation d'un composant associé pour donner le focus (cf. attribut setLabelFor(JComponent), la gestion des raccourcis claviers, etc...

    Cette solution n'est pas idéale mais fonctionne.

    F.

  5. #5
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Une solution possible est d'appliquer le même principe que pour les cellules des JTables : un composant pour la lecture (plutot un Renderer pour les JTables, mais ça n'a pas d'importance), un autre pour l'édition.

    Tu affiches d'abord un JLabel pour la lecture, et lorsque on clique dessus, pouf ! tu commutes pour montrer un JTextField, et sur ENTREE tu réaffiches le JLabel.

    Tu prendrais un JPanel ayant un CardLayout, une carte affichant le JLabel, l'autre le JTextField.

    Je pense que ce devrait être viable. Tiens nous au courant.

Discussions similaires

  1. [Composant] JLabel avec coupe dans le texte rendu
    Par ellene dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 08/02/2008, 17h23
  2. Comment integrer des jlabel avec du texte
    Par icicmoi dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 16/06/2007, 10h33
  3. mise en page texte JLabel avec html
    Par javamax dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 03/04/2007, 20h23
  4. [Jlabel] Comment creer un label avec deux textes centrés?
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 25/12/2006, 17h20
  5. JLabel avec HTML mais texte déborde
    Par Belegkarnil dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 28/02/2006, 12h18

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