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 :

Entête de JTABLE en GrandientPaint


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut Entête de JTABLE en GrandientPaint
    Bonjour,

    Je cherche à colorer les entêtes de colonnes de ma JTable.

    Les entêtes de ma JTable sont multilignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MultiLineHeaderRenderer renderer = new MultiLineHeaderRenderer();
    Enumeration<TableColumn> e = m_table.getColumnModel().getColumns();
     
    while (e.hasMoreElements())
    {
         ((TableColumn) e.nextElement()).setHeaderRenderer(renderer);
    }
    Voici le code de "MultiLineHeaderRenderer"

    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
     
    class MultiLineHeaderRenderer extends JList implements TableCellRenderer 
    {
         private static final long serialVersionUID = 1L;
     
         public MultiLineHeaderRenderer() 
         {
    	setOpaque(false); // Car on va dessiner le fond nous même
     
    	setBorder(BorderFactory.createEtchedBorder());
     
    	ListCellRenderer renderer = getCellRenderer();
    	((JLabel) renderer).setHorizontalAlignment(JLabel.CENTER);
    	setCellRenderer(renderer);
         }
     
         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
         {
              setFont(table.getFont());
              String str = (value == null) ? "" : value.toString();
              BufferedReader br = new BufferedReader(new StringReader(str));
              String ligne;
              Vector<String> vListe = new Vector<String>();
              try 
              {
                   while ((ligne = br.readLine()) != null) 
                   {
                        vListe.addElement(ligne);
                   }
              } 
              catch (Exception ex) 
              {
                   ex.printStackTrace();
              }
              setListData(vListe);
              return this;
         }
     
         @Override
         protected void paintComponent(Graphics g) 
         {
              Graphics2D g2d = (Graphics2D) g;
              GradientPaint gp = new GradientPaint(0, 0,Color.white, 0, getHeight(), Color.green);
              g2d.setPaint(gp); 
              g2d.fillRect(0, 0, getWidth(), getHeight()); 
              super.paintComponent(g);
         }
    }
    Avec le code écrit ainsi, mes entête restent de la couleur de base (gris).

    Si j'enlève le "super.paintComponent(g);" de la méthode "protected void paintComponent(Graphics g)", le dégradé fonctionne correctement sur les entêtes, mais je n'ai plus le texte des entêtes.

    Merci de vos conseils

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut
    Pour ceux que cela intéresse, j'ai solutionné le problème en n'étendant plus JList mais JTextPane pour mes entêtes multi-lignes

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Et pour info, bah pour ta JList, il lui fallait aussi un renderer non opaque...
    Renderer dans un renderer, inception, tout ça, tout ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MyListCellRenderer
        extends DefaultListCellRenderer{
        public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus ) {
            Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus );
            ((JComponent)c).setOpaque( isSelected );
            return c;
        }
    }

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut
    Ah oui, c est l inception. Dans tous les setOpaque que j ai tenté, je n avais pas pense a faire un renderer non opaque...

    Merci pour ta réponse sinok

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

Discussions similaires

  1. entête des JTable
    Par druzy dans le forum Composants
    Réponses: 2
    Dernier message: 09/09/2008, 14h00
  2. [JTable] Ne pas afficher les entêtes de colonnes
    Par nicolas.pied dans le forum Composants
    Réponses: 2
    Dernier message: 27/01/2006, 11h22
  3. [JTable] Ne pas afficher l'entête
    Par GENERYS dans le forum Composants
    Réponses: 2
    Dernier message: 10/10/2005, 09h58
  4. [JTable] Personnaliser l'apparence des entêtes de colonne
    Par seiryujay dans le forum Composants
    Réponses: 3
    Dernier message: 03/10/2005, 17h09
  5. Réponses: 2
    Dernier message: 21/09/2005, 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