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):
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());
avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
public void setModel(TableModel model) {
		jTable.setModel(model);
		}
Remplissage de table:
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]);
				}
data[i] sont des valeurs (peu importe)

le renderer:
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;
	}
}
Là pour l'instant, je colorie juste en magenta ma colonne 4 et les autres en blanc, mais le texte du coup disparait

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:
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);
		}
Est-ce possible et si oui, comment faire?

D'avance, merci à ceux qui pourront m'aider