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

avec Java Discussion :

override de setText (JLabel)


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut override de setText (JLabel)
    Bonjour,

    Je cherche à permettre l'affichage du point décimal sous sa forme française ( , ) dans un JLabel. Je pensais donc surcharger les méthodes getText et setText de mon JLabel de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            public static String MARQUEUR_DECIMAL = ",";
     
            @Override
                public String getText() {
                    return super.getText().replace(MARQUEUR_DECIMAL, ".");
                }
     
            @Override
                public void setText(String texte) {
                    System.out.println(texte.replace(".", MARQUEUR_DECIMAL));
                    super.setText(texte.replace(".", MARQUEUR_DECIMAL));
                }
    Problème :
    Lorsque je test mon objet, j'obtiens un résultat assez déroutant :

    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 Main {
     
        public static void main(String[] args) {
            JFrame a=new JFrame();
            EcranDAffichage ecran = new EcranDAffichage("");
            a.getContentPane().add(ecran);
            a.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            a.setSize(220,80);
            a.setVisible(true);
            ecran.setText("0,1");
        }
     
        public static String MARQUEUR_DECIMAL = ",";
     
            public static class EcranDAffichage extends JLabel {
                public EcranDAffichage(String label) {
                    super(label);
                    setHorizontalAlignment(JLabel.RIGHT);
                    setPreferredSize(new Dimension(220, 40));
                }
            @Override
                public String getText() {
                    String texte = super.getText();
                    return texte.replace(MARQUEUR_DECIMAL, ".");
                }
     
            @Override
                public void setText(String texte) {
                    System.out.println(texte.replace(".", MARQUEUR_DECIMAL));
                    super.setText(texte.replace(".", MARQUEUR_DECIMAL));
                    repaint();
                }
            }
     
    }
    Le println me renvoie "0,1"
    Le JLabel m'affiche "0.1"...

    Merci de votre aide

  2. #2
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    le paint de JLabel n'utiliserait t'il pas le getText ??? Si tu a les .java du jdk c'est à aller vérifier.

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    Ca c'est fort possible. Mais si tu n'as pas les sources .java comme tu redéfinies la méthode getText(), tu peux mettre une trace ou un point d'arrêt en déboggant

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Ben... Probablement, puisqu'en mettant mon override de getText en commentaire, ça marche...


    Est-ce que je suis le seul à trouver aberrant le fait que paint utilise la méthode getText qui est publique, non final, et surtout, getteur ! C'est à dire qu'il est justement susceptible d'être modifié pour s'adapter aux besoins d'entrée/sortie de l'utilisateur !

    Enfin bon... Bref. Quels sont mes moyens de contrer ça? Laisser tomber la surcharge de getText et remplacer tous les getText de mon code par un getTextFormaté(), un truc du genre? Une autre idée?

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    Perso, je ne vois pas ce qui te dérange :

    Dans getText(), tu transformes les ',' en '.'
    Dans setText(), tu fais les l'inverse : tu transformes les '.' en ','

    JLabel étant un objet, sans creuser plus, à mon avis il fonctionne comme tout objet respectant la norme de l'encapsulation. A savoir, a un attribut de type String, et lorsques tu fais un setText(), il écrit dans cette variable et getText() lit la variable. Donc si tu transformes les points en virgule, il n'y a pas de raison que de faire le chemin inverse dans la méthode getText().

  6. #6
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    Sinon tu peut pas transformer le String en float ? tu aura alors le . ou la , en fonction de paramètre local de ton appli ...

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Dans getText(), tu transformes les ',' en '.'
    Dans setText(), tu fais les l'inverse : tu transformes les '.' en ','
    Je ne suis pas d'accord :

    Comme précisé précédemment, paint utilise getText. Au final, si j'essaye d'écrire "0,1", avec ta méthode, il va faire :

    setText("0.1")
    - transforme "0.1" en "0,1"
    - appelle paint() -> getText() -> transforme "0,1" en "0.1" -> affiche "0.1" dans le JLabel

    C'est ce qu'il se passe dans mon exemple (Cf premier post)

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    Citation Envoyé par Sharcoux Voir le message
    Je ne suis pas d'accord :

    Comme précisé précédemment, paint utilise getText. Au final, si j'essaye d'écrire "0,1", avec ta méthode, il va faire :

    setText("0.1")
    - transforme "0.1" en "0,1"
    - appelle paint() -> getText() -> transforme "0,1" en "0.1" -> affiche "0.1" dans le JLabel

    C'est ce qu'il se passe dans mon exemple (Cf premier post)
    Donc setText() appelle paint ?
    Pour quelle raison getText() transforme les ',' en '.' ?

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

Discussions similaires

  1. Utiliser setText (JLabel) dans une methode static
    Par Fahelis dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 21/05/2014, 22h53
  2. [Java] JLabel setText() saut de ligne
    Par GyZmoO dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 09/05/2007, 21h57
  3. JLabel, soucis lors d'un setText dessus.
    Par Djobird dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 25/04/2007, 15h37
  4. setText() ne fonctionne pas sur un JLabel
    Par TheBAT dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 06/01/2007, 12h11
  5. [Look and feel] Texte des JLabels en gras
    Par aliasjcdenton dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 26/01/2006, 11h49

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