DefaultTableCellRenderer et problème d'"imbrication"
Bonjour,
Nouveau sur ce site, et débutant dans la POO, en particulier Java, je me tourne vers vous afin de vous demandez une petite aide sur un petit problème que je rencontre et qui, je suis sûr, a une solution simple. Tout cela dans le cadre d'une auto-formation. En fait, avant de détailler, mon problème se situe sur une "sorte" d'imbrication de DefaultTableCellRenderer. Mais avant tout, mon code va en faire sans doute hurler plus d'un, mais on a tous été débutant, non ? :zoubi:
En effet, j'ai une classe ProprietesLigneTable qui permet de définir la police, les bordures des cellules et la couleur des lignes. Elle marche bien et je la donne ci-dessous :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
public class ProprietesLigneTable extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setFont(new Font("Lucida Console", Font.PLAIN, 13));
setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
if ((row & 1) == 0) { // Ligne paire
setBackground(Color.LIGHT_GRAY);
} else { // Ligne impaire
setBackground(Color.WHITE);
}
return this;
}
} |
Cette classe est mise en oeuvre dans une méthode (d'une autre classe) de la façon suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
TableColumn col;
table.setRowHeight(28);
ProprietesLigneTable pct=new ProprietesLigneTable();
for (int i=0;i<=nbColonnes;i++) {
table.getColumnModel().getColumn(i).setCellRenderer(pct);
col = table.getColumnModel().getColumn(i);
if(table.getModel().getColumnName(i).equals("Compte")) {
// Là je fais quelques traitements du style :
col.setMinWidth(87);
col.setMaxWidth |
Tout ça marche bien. En fait, pour résumer cette méthode, elle donne des tailles fixes aux colonnes et ces tailles sont fonction de la longueur de la source. Est-ce dans la philosophie Java, je ne sais pas, mais là n'est pas encore mon problème.
En glanant sur Internet, j'ai trouvé aussi la façon de centrer le contenu dans une colonne, et le code suivant marche bien :
Code:
1 2 3 4
|
DefaultTableCellRenderer custom = new DefaultTableCellRenderer();
custom.setHorizontalAlignment(JLabel.CENTER); // centre les données de ton tableau
col.setCellRenderer(custom); // avec col=col = table.getColumnModel().getColumn(i); |
Mais si on reprend ma méthode ci-dessus et qu'on fait :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
// Propriétés des lignes.
DefaultTableCellRenderer custom = new DefaultTableCellRenderer();
custom.setHorizontalAlignment(JLabel.CENTER); // centre les données de ton tableau
TableColumn col;
table.setRowHeight(28);
ProprietesLigneTable pct=new ProprietesLigneTable();
for (int i=0;i<=nbColonnes;i++) {
table.getColumnModel().getColumn(i).setCellRenderer(pct);
col = table.getColumnModel().getColumn(i);
if(table.getModel().getColumnName(i).equals("Compte")) {
//col.setPreferredWidth(87);
col.setMinWidth(87);
col.setMaxWidth(87);
} else if(table.getModel().getColumnName(i).equals("Date")) {
//col.setPreferredWidth(87);
col.setMinWidth(87);
col.setMaxWidth(87);
col.setCellRenderer(custom); |
la colonne perd toutes les propriétés mises en œuvre par l'instanciation de ProprietesLigneTable(). En fait j'ai soit l'un, soit l'autre, mais pas les deux.
Je ne sais pas si j'ai été très clair. Il me semble que dans ma classe ProprietesLigneTable() j'utilise DefaultTableCellRenderer mais que comme dans ma méthode j'en instancie un autre, le premier n'est plus d'actualité.
Et ma question est donc : comment faire pour appliquer mon setCellRenderer(custom).
Je vous remercie beaucoup,
Aldrik.