bonjour,
je cherchais un moyen de modifier la couleur d'une ligne d'un JTable. J'ai donc utilisé le TableCellRenderer. Le programme fonctionne très bien, mais comme je débute dans le langage il y a des choses qui m'échappent complètement![]()
Ma fenêtre contient un JTable avec 8 lignes (sans compter la ligne des titres), un JButton et un JComboBox qui contient des nombres allant de 1 à 8.
ma classe principale (j'utilise Netbeans)
et mon TableCellRenderer
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 public class myTable extends javax.swing.JFrame { private myCellRenderer cr = new myCellRenderer(); /** Creates new form myTable */ public myTable() { int i; initComponents(); for (i=0; i<this.jTable1.getColumnCount(); i++) this.jTable1.getColumnModel().getColumn(i).setCellRenderer(cr); this.jTable1.setRowSelectionAllowed(false); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { int index; index = this.jComboBox1.getSelectedIndex(); this.cr.setRowColor(index, Color.CYAN); this.jTable1.repaint(); } private void initComponents() { ................... } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new myTable().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton jButton1; private javax.swing.JComboBox jComboBox1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; // End of variables declaration
avec la fonction setRowColor() je peux affecter à une ligne de mon JTable une couleur.
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 import java.awt.Color; import java.awt.Component; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; public class myCellRenderer extends DefaultTableCellRenderer { private int numRow; private Color rowColor; public myCellRenderer() { super(); super.setOpaque(true); numRow = -1; rowColor = Color.WHITE; } public void setRowColor(int row, Color color) { numRow = row; rowColor = color; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (row==numRow) { cell.setBackground(rowColor); //System.out.println("ok"); } else { cell.setBackground(Color.WHITE); } return cell; } }
Ce que je comprends pas c'est au niveau de getTableCellRendererComponent().
Si le numéro de ligne est égal au numéro de ligne que j'ai sélectionné, je change la couleur du fond.
Si je mets lej'obtiens bien ce que je souhaite (screen.jpg) par contre si je ne mets pas le else j'obtiens tout autre chose (screen2.jpg).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 else { cell.setBackground(Color.WHITE); }
- Pourquoi est-ce que je suis obligé de préciser pour les lignes qui suivent celle que j'ai sélectionnée la couleur du fond, c'est à dire WHITE ?
C'est comme si finalement le setBackground() était à la fois valable pour la ligne sélectionnée mais aussi pour les autres....
Partager