[JTABLE] Colorier cellule selon sa valeur: 2 problemes
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:
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:
1 2 3 4
|
public void setModel(TableModel model) {
jTable.setModel(model);
} |
Remplissage de table:
Code:
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:
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:
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 :)