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 :

Font caractères avec header 2 lignes


Sujet :

Composants Java

  1. #1
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut Font caractères avec header 2 lignes
    Bonjour,

    j'ai un problème avec la font de caractères lorsque je crée un header de JTable sur 2 lignes.
    Je déclare un Renderer pour le header à l'aide d'une classe implémentant TableCellRenderer.
    Un grand classique...

    Lorsque je définis le texte des colonnes du header,
    - Si c'est un texte simple, genre "Colonne X", cela est écrit avec la font définie dans le renderer.
    - Si c'est un texte sur 2 lignes, genre "<html>Limite<br/>essai</html>", cela est écrit avec une font que je n'ai pas spécifiée.

    Quelqu'un a-t-il déjà eu ce problème, et y a-t-il une solution ?

    Merci
    @ bientôt...

    Salut & @+ sur 3W!

  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,

    Première question : quelle version de Java ? Dans les Java récents, la police par défaut du rendu html est la police du composant de rendu, mais dans des anciennes versions (Java 5, de mémoire, utilisait encore une police standard par défaut pour le html, qui n'était pas celle du composant : il fallait inclure dans le html une balise FONT pour avoir la même police).

    Donc, question corollaire, comment affectes-tu la police au composant de rendu ?
    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
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour Joel,

    voici la classe du Renderer tel que je l'implémente:
    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
    private class CRenduEnTete extends JLabel implements TableCellRenderer
    {
      private static final long serialVersionUID = 1L;
     
      public CRenduEnTete() {
        super();
     
        setFont( C_Gemo.policeReduite ); // C'est la police de caractère désirée...
        setHorizontalAlignment( JLabel.CENTER );
        setOpaque( true );
      }
     
      @Override
      public Component getTableCellRendererComponent( JTable jTbl, Object oVal, boolean yaselection, boolean yafocus, int l, int c ) {
        setText( (String)oVal );
        //...
        ...//
      }
    }
    Ensuite j'affecte par exemple une valeur comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maJTable.getColumnModel().getColumn( 5 ).setHeaderValue( "<html>Limite<br/>essai</html>" );
    Dans ce cas la police de caractère ne correspond pas à celle que je désire.

    Notez que si le texte transmis vaut par exemple "Limite"; alors la police de caractère est juste. Les balises HTML semblent poser problème, hors je ne connais pas d'autre moyen pour mettre un label de header sur 2 lignes


    Tout cela fonctionne sous JAVA8.
    @ bientôt...

    Salut & @+ sur 3W!

  4. #4
    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
    Comme ça, je ne vois pas pourquoi ça ne fonctionne pas (j'ai testé à l'instant moi-même ton renderer(avec Arial, BOLD/ITALIC, 24) et ça fonctionne).

    Essaye en commentant l'affectation du renderer et en faisant à la place table.getTableHeader().setFont(C_Gemo.policeReduite); (c'est d'ailleurs suffisant pour faire juste ce que tu veux faire, et ça a le même problème dans les 2 cas*). Essaye ton renderer aussi peut-être avec une police standard, en modifiant juste la taille pour voir.

    *Le problème dont je parle, c'est que le dimensionnement du header se fait sur la base de la première colonne, lorsqu'on redimensionne une colonne, et que si la première colonne est sur une seule ligne, toutes les entêtes se retrouvent alors écrasées sur une hateur de jlabel à une ligne.
    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.

  5. #5
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour Joel,

    merci pour ces pistes, mais le mystère reste entier

    En effet, après avoir fait table.getTableHeader().setFont(C_Gemo.policeReduite); dans le constructeur du Renderer... sans succès, j'ai changé de police de caractères, une plus petite pour voir... et là, cela a fonctionné... enfin presque.
    Il tient compte de la taille de la fonte, mais il affiche le texte avec une police de caractères qui n'est pas celle que j'ai demandé.

    Je retrouve ce problème avec des JLabel aussi. Or le header est constitué de JLabel me semble-t-il.
    Je dirai donc que le problème se situe au niveau de ce composant.
    Voici l'exemple de ce que j'obtiens sur des JLabels. Le phénomène est le même dans un header de JTable.

    Nom : Exemple font.jpg
Affichages : 135
Taille : 25,9 Ko
    On voit clairement que les JLabel à 2 lignes respectent la taille de la police mais n'utilisent pas celle désirée.
    @ bientôt...

    Salut & @+ sur 3W!

  6. #6
    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
    Citation Envoyé par rtg57 Voir le message
    En effet, après avoir fait table.getTableHeader().setFont(C_Gemo.policeReduite); dans le constructeur du Renderer...
    Je parlais de supprimer le renderer (de laisser celui par défaut).

    J'ai l'impression plutôt que le problème vient de la police : c'est quoi cette police ? Tu peux me la fournir, que je regarde si j'ai le même effet ?

    Citation Envoyé par rtg57 Voir le message
    Je retrouve ce problème avec des JLabel aussi. Or le header est constitué de JLabel me semble-t-il.
    Je dirai donc que le problème se situe au niveau de ce composant.
    Le rendu des textes est fait par des classes à part, les mêmes qui sont utilisées partout, donc normalement le comportement est le même pour tous les composants qui affichent du texte.
    Tu es sous Windows ou un autre environnement graphique ?
    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.

  7. #7
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    après des jours de galère, j'ai enfin trouvé la réponse:
    le problème vient du fait que pour afficher du texte en HTML, il faut que la police de caractères soit 'enregistrée' au niveau de la JVM.
    Donc après avoir défini celle-ci, il faut ajouter cette ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont( maPoliceAMoi );
    Ouf !!
    Il y a toujours une solution en JAVA

    PS: il reste quand même un mystère... une fonte en italique s'affiche droite lorsque le texte est sur 2 lignes... J'abandonne
    @ bientôt...

    Salut & @+ sur 3W!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/05/2014, 10h40
  2. [Toutes versions] Chaîne de caractères avec retours à la ligne
    Par Z20500 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/02/2013, 19h46
  3. [Mail] mail header avec saut de ligne
    Par benoitXV dans le forum Langage
    Réponses: 1
    Dernier message: 28/11/2008, 12h32
  4. Caractère en fin de ligne avec regsub
    Par sylvain_54 dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 14/08/2008, 18h08
  5. Réponses: 2
    Dernier message: 16/11/2007, 11h33

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