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 ?
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 :
Cette classe est mise en oeuvre dans une méthode (d'une autre classe) de la façon suivante :
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 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; } }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
En glanant sur Internet, j'ai trouvé aussi la façon de centrer le contenu dans une colonne, et le code suivant marche bien :
Mais si on reprend ma méthode ci-dessus et qu'on fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
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.
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 // 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);
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.
Partager