Bonsoir à tous,
Avec beaucoup d'aide de certains d'entre vous (et je tiens à vous en remercier), j'ai enfin (presque) compris la philosophie du renderer et des jtable.
Mais il me reste 2 problemes à resoudre:
1/ les valeurs dispraissent de mon tableau lorsque je colorie des cellules
2/ Je souhaite colorier la cellule selon sa propre valeur
Un peu de detail:
Mon model (le "if(columnIndex == 1 || columnIndex == 2 || columnIndex == 3 || columnIndex == 4) {" ne sert à rien pour l'instant et le "isCellEditable" permet que mon tableau ne soit pas editable par l'utilisteur (par la suite, il y aura moins une seule colonne editable, mais ce probleme n'est pas repris ici):
avec
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 public void setModel(TableModel model) { jTable.setModel(model); } private JTable getJTable() { if (jTable == null) { String[] columsNames = {"Nom Fichier", "Taille (Ko)","Nbre analyses", "% plagié", "% confiance"}; String fichierConfig = "./config.txt"; File testFichier = new File(fichierConfig); //Object[][] data = {{"Premier", new Integer(123),new Integer(112), new Integer(313),new Integer(98)},{"Deuxieme", new Integer(23),new Integer(12), new Integer(13),new Integer(48)}}; Object[][] data ; int nombreLignes = 0; jTable = new JTable(); DefaultTableModel defaultModel = new DefaultTableModel(columsNames,0) { public Class getColumnClass(int columnIndex) { jTable.getColumnModel().getColumn(0).setPreferredWidth(300); if(columnIndex == 1 || columnIndex == 2 || columnIndex == 3 || columnIndex == 4) { ///************************** //return Integer.class; return super.getColumnClass(columnIndex); } else { return super.getColumnClass(columnIndex); } } public boolean isCellEditable(int rowIndex, int columnIndex) { // rendre non editable la jtable return columnIndex >= 10; } }; setModel(defaultModel); jTable.setDefaultRenderer(Object.class, new CellRenderer());Remplissage de table:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void setModel(TableModel model) { jTable.setModel(model); }
data[i] sont des valeurs (peu importe)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for (int i=0; i<nombreLignes; i++) { defaultModel.insertRow(defaultModel.getRowCount(), data[i]); }
le renderer:
Là pour l'instant, je colorie juste en magenta ma colonne 4 et les autres en blanc, mais le texte du coup disparait
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 import java.awt.Color; import java.awt.Component; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; public class CellRenderer extends JLabel implements TableCellRenderer{ private static final long serialVersionUID = -6348693518838532834L; public CellRenderer(){ super(); setOpaque(true); } public Component getTableCellRendererComponent(JTable jTable, Object value, boolean isSelected, boolean hasFocus, int row, int col) { System.out.println(col); if (col==3) { setBackground(Color.magenta); } else { setBackground(Color.white); } return this; } }
Et second probleme: je souhaite, par rapport à la valeur de la colonne 4, avoir 2 choix de couleur: bleu et rouge par exemple. Avoir donc un truc du genre:
Est-ce possible et si oui, comment faire?
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 if (col==3) { if (valeurcol3 < 10 { setBackground(Color.blue); } else { setBackground(Color.red); } } else { setBackground(Color.white); }
D'avance, merci à ceux qui pourront m'aider![]()
Partager