Se connecter avec
S'enregistrer | Connectez-vous

changer la couleur d'une case dans un JTable

Dernière réponse : dans Programmation

je voulais changer la couleur d'une cellule dans un JTable alors j'ai créé la classe suivante

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class RedRenderer extends DefaultTableCellRenderer {

/**
*
*/
private static final long serialVersionUID = 1L;


public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

// Tu appelles la méthode par défaut, qui te construit la case
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, 0, 0);


// Tu changes la couleur de la case
c.setBackground(Color.RED);
c.setForeground(Color.MAGENTA);

return table;


}
}



et quand je fait l'appel de ctte classe dans une autre

maJTable.setDefaultRenderer(null,new RedRenderer());
((RedRenderer)maJTable.getDefaultRenderer()).changeColors = true;
mais le problème est que ne se change


Autres pages sur : changer couleur case jtable

Lassé par la pub ? Créez un compte

change ça :
  1. maJTable.setDefaultRenderer(String.class,new RedRenderer());

(toutes tes string auront un background rouge.

et dans redRenderer, rajoute un constructeur par défaut, et appelle
  1. setOpaque(true);


et dans la méthode getTableCellRendererComponent, fait un
  1. return c;
au lieu d'un return table.

Dernière chose, il faut que ton JTable comporte un TableModel
  1. jTable = new JTable(new MyTableModel());


avec MyTableModel :
  1. class MyTableModel extends AbstractTableModel {
  2. private String[] columnNames = {"First Name",
  3. "Favorite Color",
  4. "Sport",
  5. "# of Years",
  6. "Vegetarian"};
  7. private Object[][] data = {
  8. {"Mary", "ert", "Snowboarding", new Integer(5), new Boolean(false)},
  9. {"Alison", "ert", "Rowing", new Integer(3), new Boolean(true)},
  10. {"Kathy", "ert", "Knitting", new Integer(2), new Boolean(false)},
  11. {"Sharon", "ert", "Speed reading", new Integer(20), new Boolean(true)},
  12. {"Philip", "ert", "Pool", new Integer(10), new Boolean(false)}
  13. };
  14.  
  15. public int getColumnCount() {
  16. return columnNames.length;
  17. }
  18.  
  19. public int getRowCount() {
  20. return data.length;
  21. }
  22.  
  23. public String getColumnName(int col) {
  24. return columnNames[col];
  25. }
  26.  
  27. public Object getValueAt(int row, int col) {
  28. return data[row][col];
  29. }
  30.  
  31. /*
  32. * JTable uses this method to determine the default renderer/
  33. * editor for each cell. If we didn't implement this method,
  34. * then the last column would contain text ("true"/"false"),
  35. * rather than a check box.
  36. */
  37. public Class getColumnClass(int c) {
  38. return getValueAt(0, c).getClass();
  39. }
  40.  
  41. public boolean isCellEditable(int row, int col) {
  42. //Note that the data/cell address is constant,
  43. //no matter where the cell appears onscreen.
  44. if (col < 1) {
  45. return false;
  46. } else {
  47. return true;
  48. }
  49. }
  50. }


Exemple : http://java.sun.com/docs/books/tutorial/uiswing/compone...

Le tableModel est l'équivalent à la ListModel , un component te permettant de customiser un peu plus finement l'interaction et le design d'une JTable.

Le copier coller c'est mal , c'est bien connu ;) 
Lassé par la pub ? Créez un compte
Tom's guide dans le monde