Tom's Guide > Forum > Programmation > changer la couleur d'une case dans un JTable

changer la couleur d'une case dans un JTable

Forum Programmation : changer la couleur d'une case dans un JTable

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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


Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

heu... t'aurais une grosse trace, genre, nullpointerException qqpart ?

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

je n'ai pas compris???

Répondre à sky88

quand tu fais appel à

Code :
  1. maJTable.setDefaultRenderer(null,new RedRenderer());



tu n'as pas une erreur ?

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

non aucune erreur

Répondre à sky88

change ça :

Code :
  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

Code :
  1. setOpaque(true);



et dans la méthode getTableCellRendererComponent, fait un

Code :
  1. return c;

au lieu d'un return table.

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

Dernière chose, il faut que ton JTable comporte un TableModel

Code :
  1. jTable = new JTable(new MyTableModel());



avec MyTableModel :

Code :
  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.         public int getColumnCount() {
  15.             return columnNames.length;
  16.         }
  17.         public int getRowCount() {
  18.             return data.length;
  19.         }
  20.         public String getColumnName(int col) {
  21.             return columnNames[col];
  22.         }
  23.         public Object getValueAt(int row, int col) {
  24.             return data[row][col];
  25.         }
  26.         /*
  27.         * JTable uses this method to determine the default renderer/
  28.         * editor for each cell.  If we didn't implement this method,
  29.         * then the last column would contain text ("true"/"false" ),
  30.         * rather than a check box.
  31.         */
  32.         public Class getColumnClass(int c) {
  33.             return getValueAt(0, c).getClass();
  34.         }
  35.         public boolean isCellEditable(int row, int col) {
  36.             //Note that the data/cell address is constant,
  37.             //no matter where the cell appears onscreen.
  38.             if (col < 1) {
  39.                 return false;
  40.             } else {
  41.                 return true;
  42.             }
  43.         }
  44. }



Exemple : http://java.sun.com/docs/books/tut [...] l#renderer

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

merci à vs mais je n'ai pas compris comment utiliser la classe MyTableModel et elle sert à quoi
merci

Répondre à sky88

ouais, alors, ici, c'est pas un cours de programmation...

on aide un peu, mais faut pas abuser. si tu ne sais pas chercher par toi même, laisse tomber la programmtion.

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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 ;)

------------------------------
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne et personne ne sais pourquoi...
Répondre à RiiMii
Tom's Guide > Forum > Programmation > changer la couleur d'une case dans un JTable
Aller à :

Il y a 2015 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens