[JTable] Modifier la couleur d'une cellule
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 :oops: :oops:
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)
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 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 |
et mon TableCellRenderer
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 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;
}
} |
avec la fonction setRowColor() je peux affecter à une ligne de mon JTable une couleur.
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 le
Code:
1 2 3 4 5
|
else
{
cell.setBackground(Color.WHITE);
} |
j'obtiens bien ce que je souhaite (screen.jpg) par contre si je ne mets pas le else j'obtiens tout autre chose (screen2.jpg).
- 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....