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 :

[Composant] JLabel avec coupe dans le texte rendu


Sujet :

AWT/Swing Java

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut [Composant] JLabel avec coupe dans le texte rendu
    Bonjour
    Je dois afficher un path dans un JLabel de une ligne.
    exemple de path : /home/user1/toto/data/tests/ft_tests/lists/toto.lst
    Si le texte est trop long JLabel affiche par défaut /home/user1/toto/data...
    Moi je voudrais plutôt afficher ...tests/ft_tests/lists/toto.lst

    Existe-t-il une façon de faire cela?
    Merci d'avance

  2. #2
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    Je vois pas a premièrement vu ce qui peut faire changer ce comportement vu la méthode clipString de SwingUtilities2 :

    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
     
        public static String clipString(JComponent c, FontMetrics fm,
                                        String string, int availTextWidth) {
            // c may be null here.
            String clipString = "...";
            int width = SwingUtilities2.stringWidth(c, fm, clipString);
            // NOTE: This does NOT work for surrogate pairs and other fun
            // stuff
            int nChars = 0;
            for(int max = string.length(); nChars < max; nChars++) {
                width += fm.charWidth(string.charAt(nChars));
                if (width > availTextWidth) {
                    break;
                }
            }
            string = string.substring(0, nChars) + clipString;
            return string;
        }
    mais je suis pas certain que c'est cette méthode qui soit utilisée lors de l'affichage d'un JLabel !!

  3. #3
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Et si tu dis d'afficher en rtl (right-to-left) ? comme pour l'arabe ?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Bonjour
    L'idée d'écrire en right_to_left ne marche pas les trois points de suspenssions sont tjs à doite.
    Pour être complet de dois utiliser Java1.5.
    J'ai une façon de faire pour avoir les trois points de suspensions à gauche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    JLabel mlabel = new JLabel();
    String pPath = "/home/user1/toto/data/tests/ft_tests/lists/toto.lst";
    
    String pPathRevert = new StringBuilder(pPath).reverse().toString();
    
    String lCompound = SwingUtilities.layoutCompoundLabel(mlabel,mlabel.getFontMetrics(mlabel.getFont()), 
    pPathRevert,null,mlabel.getVerticalAlignment(),mlabel.getHorizontalAlignment(),
    mlabel.getVerticalTextPosition(),mlabel.getHorizontalTextPosition(),
    mlabel.getVisibleRect(),new Rectangle(0, 0), mlabel.getVisibleRect(), 0);
    lCompound = new StringBuilder(lCompound).reverse().toString(); mlabel.setText(lCompound);
    Avec ce code on affiche bien ...tests/ft_tests/lists/toto.lst dans le Jlabel.

    Cependant c'est un post traitement, j'aimerais donc changer le comportement d'affichage du texte par défaut dans le Jlabel pour que lors du paint ou du repaint il applique mon comportement.

    Merci d'avance

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Bonjour
    Pour Commencer merci à ceux qui m'ont répondu
    J'ai trouvé la façon la plus propre de résoudre mon pb.
    Il faut hériter de BasicLabelUI et surcharger le méthode layoutCL

    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
      public class MyJLabelUI extends BasicLabelUI
      {
        private String mText = null;
        public MyJLabelUI()
        {
          super();
        }
        
        protected String layoutCL(
            JLabel label,                  
            FontMetrics fontMetrics, 
            String text, 
            Icon icon, 
            Rectangle viewR, 
            Rectangle iconR, 
            Rectangle textR)
        {
          String textRevert = new StringBuilder(text).reverse().toString();
          String lCompound = SwingUtilities.layoutCompoundLabel(
              (JComponent) label,
              fontMetrics,
              textRevert,
              icon,
              label.getVerticalAlignment(),
              label.getHorizontalAlignment(),
              label.getVerticalTextPosition(),
              label.getHorizontalTextPosition(),
              viewR,
              iconR,
              textR,
              label.getIconTextGap());
            return (new StringBuilder(lCompound).reverse().toString());
        }
    }
    Avec ce code le comportement par défaut du JLabel est changé à condition
    d'utiliser mLabel.setUI(new MyJLabel()), ainsi quand le texte à afficher dans le
    JLabel est trop long on obtient "..." en début de texte et non en fin.
    Cela peut-être très utile si le JLabel sert à afficher un path

    Encore Merci à tous

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/05/2015, 16h04
  2. [CS5] Passer des variables avec incrémentation dans champ texte
    Par Aymeric06400 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/05/2013, 05h28
  3. parse fichier XML avec url dans le text
    Par bruno.rotrou dans le forum jQuery
    Réponses: 4
    Dernier message: 21/06/2011, 12h13
  4. Boucle for avec variable dans le texte
    Par Alplob dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/06/2011, 10h33
  5. [JLabel] texte HTML avec image dans un JAR
    Par matt11 dans le forum Composants
    Réponses: 5
    Dernier message: 18/08/2008, 13h53

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