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 :

[JTable] Personnaliser l'apparence des entêtes de colonne


Sujet :

Composants Java

  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut [JTable] Personnaliser l'apparence des entêtes de colonne
    J'aimerai customiser un peu mes entêtes de colonnes dans ma Jtable, afin de pouvoir afficher certaines entêtes avec une bordure colorée.
    Pour l'instant, voilà ce que j'ai fait :
    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
     
    public class HeaderCellRenderer implements TableCellRenderer{
    		/** Label used to display the text and colour of the cell */
    		private JLabel l = new JLabel();
     
     
    		public HeaderCellRenderer(){
    			l.setOpaque(true);
    		}
     
    		/**
                     * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
                     */
    		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    			// gestion de la police de caractères des cellules
    			if (row==0 || column==0){
    				l.setFont(new Font("SansSerif",Font.BOLD,11));
    			}
    			else{
    				l.setFont(new Font("SansSerif",Font.PLAIN,11));
    			}
     
    			// gestion des cellules entête
    			if (startPosition != -1	&& column>=startPosition && column<startPosition+colors.length){
    				//couleurs
    				l.setBorder(BorderFactory.createMatteBorder(4,4,4,4,colors[column-startPosition]));
    			}
    			else{
    				l.setBorder(null);
    			}
     
    			l.setToolTipText(value.toString());
    			l.setHorizontalAlignment(JLabel.CENTER);
    			l.setVerticalAlignment(JLabel.CENTER);
    			l.setText(value.toString());
     
    			return l;
    		}
    	}
    Le résultat est pas mal : j'ai bien les entêtes souhaités en couleur, malheureusement, il n'y a pas le relief comme dans les entêtes normaux...
    C'est juste un label coloré et c'est tout.

    Quelqu'un saurait-il comment faire en sorte d'avoir les entêtes en relief?
    Merci!

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Pour avoir les entêtes en relief, utilise plutôt un EtchedBorder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    l.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED,
                                                 highlightColor, shadowColor));
    Le problème est que tu vas devoir donner deux couleurs pour chaque bordure au lieu d'une, pour avoir l'effet escompté.

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ca ne donne pas exactement ce que je veux, mais je vais essayer de me débrouiller...

    Merci.

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ca y est, j'ai trouvé la bonne combinaison...
    Voilà ce que j'ai fait :
    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
     
    public class HeaderCellRenderer implements TableCellRenderer{
    		/** Label used to display the text and colour of the cell */
    		private JLabel l = new JLabel();
     
     
    		public HeaderCellRenderer(){
    			l.setOpaque(true);
    		}
     
    		/**
                     * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
                     */
    		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    			// gestion de la police de caractères des cellules
    			if (row==0 || column==0){
    				l.setFont(new Font("SansSerif",Font.BOLD,11));
    			}
    			else{
    				l.setFont(new Font("SansSerif",Font.PLAIN,11));
    			}
     
    			// gestion des cellules entête
    			if (startPosition != -1	&& column>=startPosition && column<startPosition+colors.length){
    				//couleurs
    				if (increasing) {
    //					l.setBorder(BorderFactory.createMatteBorder(4,4,4,4,colors[column-startPosition]));
    //					l.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED, 
    //							colors[column-startPosition], colors[column-startPosition]));
    					l.setBorder(BorderFactory.createCompoundBorder(
    							BorderFactory.createBevelBorder(BevelBorder.RAISED, colors[column-startPosition], Color.darkGray),
    									BorderFactory.createMatteBorder(2,2,3,3,colors[column-startPosition])));
    				}
    				else {
    //					l.setBorder(BorderFactory.createMatteBorder(4,4,4,4,colors[colors.length-(column-startPosition)-1]));
    					l.setBorder(BorderFactory.createCompoundBorder(
    							BorderFactory.createBevelBorder(BevelBorder.RAISED, colors[colors.length-(column-startPosition)-1], Color.darkGray),
    									BorderFactory.createMatteBorder(2,2,3,3,colors[colors.length-(column-startPosition)-1])));
    				}
     
    			}
    			else{
    				l.setBorder(null);
    			}
     
    			l.setToolTipText(value.toString());
    			l.setHorizontalAlignment(JLabel.CENTER);
    			l.setVerticalAlignment(JLabel.CENTER);
    			l.setText(value.toString());
     
    			return l;
    		}
    	}
    Je crée un entête avec une "bordure composée" d' :
    - d'un MatteBorder qui donne un cadre de couleur autour du texte
    - et d'un BevelBorder qui donne une impression de relief (couleur du cadre sur les parties haute et gauche, couleur gris foncé en bas et à droite)

    Voilà.
    Si ça peut aider quelqu'un, tant mieux.

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

Discussions similaires

  1. [JTable] Personnaliser l'insertion des données dans une colonne
    Par grospatapouf dans le forum Composants
    Réponses: 0
    Dernier message: 15/10/2008, 09h34
  2. [JTable] Problème d'affichage des titres de colonnes
    Par saidgrd dans le forum Composants
    Réponses: 2
    Dernier message: 10/05/2008, 21h37
  3. JTable impossible de mettre des titres de colonnes !
    Par isma92 dans le forum Composants
    Réponses: 3
    Dernier message: 20/12/2007, 21h46
  4. [JTable] Ne pas afficher les entêtes de colonnes
    Par nicolas.pied dans le forum Composants
    Réponses: 2
    Dernier message: 27/01/2006, 12h22
  5. DBGrid - changer le noms des entête de colonnes ?
    Par safab dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/11/2004, 17h49

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