si j'essaie de choisir une couleur de background à la ligne de headers
d'une JTable, je n'ai qu'un mince filet, qui entoure le bouton, de la
couleur désirée :
setBackground(Color.BLUE);
setOpaque(true);
je suis sous MacOS X.3.4 java 1.4.2.
y-at'il un moyen de contourner cette "limitation" ???
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Francis JUGE-BOIRARD
Bonjour, Une solution : - Il faut surcharger la méthode addColumn de JTable pour lui faire ajouter un entête de colonne personnaliser par exemple : public void addColumn (TableColumn aColumn) { HeaderRend defRend = new HeaderRend (); aColumn.setHeaderRenderer (defRend); super.addColumn (aColumn); }
- Il faut ensuite définir le TableCellRenderer qui sera utilisé pour afficher les entêtes de colonne. J'utilise la classe ci-dessous pour afficher des entêtes de colonne dont la couleur est définie à la construction. class HeaderRend extends JLabel implements TableCellRenderer { HeaderRend () { super (); setBorder (new EtchedBorder ()); setHorizontalAlignment (CENTER); setHorizontalTextPosition (RIGHT); setOpaque (true); setFont (getFont ().deriveFont (Font.BOLD, 12f)); }
public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText (getColumnName (column)); if (lastSort == column) { setBackground (new Color (getSelectionBackground ().getRGB () | 0x700000)); setForeground (new Color (getSelectionForeground ().getRGB () | 0x700000)); setIcon (orderSort ? iconUp : iconDown); } else { setBackground (getSelectionBackground ()); setForeground (getSelectionForeground ()); setIcon (null); } return (this); } } // class HeaderRend...
Bonjour,
Une solution :
- Il faut surcharger la méthode addColumn de JTable pour lui faire
ajouter un entête de colonne personnaliser par exemple :
public void addColumn (TableColumn aColumn)
{
HeaderRend defRend = new HeaderRend ();
aColumn.setHeaderRenderer (defRend);
super.addColumn (aColumn);
}
- Il faut ensuite définir le TableCellRenderer qui sera utilisé pour
afficher les entêtes de colonne. J'utilise la classe ci-dessous pour
afficher des entêtes de colonne dont la couleur est définie à la
construction.
class HeaderRend
extends JLabel
implements TableCellRenderer
{
HeaderRend ()
{
super ();
setBorder (new EtchedBorder ());
setHorizontalAlignment (CENTER);
setHorizontalTextPosition (RIGHT);
setOpaque (true);
setFont (getFont ().deriveFont (Font.BOLD, 12f));
}
public Component getTableCellRendererComponent (JTable table, Object
value, boolean isSelected, boolean hasFocus, int row, int column)
{
setText (getColumnName (column));
if (lastSort == column)
{
setBackground (new Color (getSelectionBackground ().getRGB () |
0x700000));
setForeground (new Color (getSelectionForeground ().getRGB () |
0x700000));
setIcon (orderSort ? iconUp : iconDown);
}
else
{
setBackground (getSelectionBackground ());
setForeground (getSelectionForeground ());
setIcon (null);
}
return (this);
}
} // class HeaderRend...
Bonjour, Une solution : - Il faut surcharger la méthode addColumn de JTable pour lui faire ajouter un entête de colonne personnaliser par exemple : public void addColumn (TableColumn aColumn) { HeaderRend defRend = new HeaderRend (); aColumn.setHeaderRenderer (defRend); super.addColumn (aColumn); }
- Il faut ensuite définir le TableCellRenderer qui sera utilisé pour afficher les entêtes de colonne. J'utilise la classe ci-dessous pour afficher des entêtes de colonne dont la couleur est définie à la construction. class HeaderRend extends JLabel implements TableCellRenderer { HeaderRend () { super (); setBorder (new EtchedBorder ()); setHorizontalAlignment (CENTER); setHorizontalTextPosition (RIGHT); setOpaque (true); setFont (getFont ().deriveFont (Font.BOLD, 12f)); }
public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText (getColumnName (column)); if (lastSort == column) { setBackground (new Color (getSelectionBackground ().getRGB () | 0x700000)); setForeground (new Color (getSelectionForeground ().getRGB () | 0x700000)); setIcon (orderSort ? iconUp : iconDown); } else { setBackground (getSelectionBackground ()); setForeground (getSelectionForeground ()); setIcon (null); } return (this); } } // class HeaderRend...
yvon.thoravalNO-SPAM
Francis JUGE-BOIRARD wrote:
Bonjour, Une solution : - Il faut surcharger la méthode addColumn de JTable pour lui faire ajouter un entête de colonne personnaliser par exemple :
[...]
- Il faut ensuite définir le TableCellRenderer qui sera utilisé pour afficher les entêtes de colonne.
OK, merci, c'est bien ce qu'il me faut. -- yt
Francis JUGE-BOIRARD <nospam@nospam.org> wrote:
Bonjour,
Une solution :
- Il faut surcharger la méthode addColumn de JTable pour lui faire
ajouter un entête de colonne personnaliser par exemple :
[...]
- Il faut ensuite définir le TableCellRenderer qui sera utilisé pour
afficher les entêtes de colonne.