Jtable et Jcheckbox, probleme de couleur - Java - Programmation
Marsh Posté le 16-12-2003 à 12:49:34
finalement j'ai réussi à faire ce que je voulais mais je trouve que c'est cradoc, si quelqu'un avait une suggestion voici le code  
 
import javax.swing.*; 
import java.awt.*; 
import java.sql.*; 
import java.util.*; 
import java.awt.event.*; 
import javax.swing.table.*; 
import javax.swing.event.TableModelEvent; 
import javax.swing.event.*; 
 
 
public class JIFScrollTable extends JScrollPane { 
  
 private  
  
 public JIFtable (Vector title) { 
 	String[] h = {"Envoi O/N","Fichier","Descriptif","Date MAJ","Sensibilité"}; 
 	abstractModel am = new abstractModel(h); 
   
 	//JIFTableModel TM  = new JIFTableModel(); 
 } 
  
} 
 
class JIFtableRenderer extends DefaultTableCellRenderer { 
  
  public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus,int row, int column) { 
    
    
    if (value instanceof Boolean) {                     
      JCheckBox checkBox = new JCheckBox(); 
      checkBox.setSelected(((Boolean)value).booleanValue()); 
      checkBox.setHorizontalAlignment(JLabel.CENTER); 
      checkBox.setBackground(Color.red); 
      return checkBox; 
    } else { 
     String str = (value == null) ? "" : value.toString(); 
     setForeground((row%2 == 0)?Color.red:Color.green); 
        setBackground((row%2 == 0)?Color.green:Color.red); 
   	return super.getTableCellRendererComponent(table,str,isSelected,hasFocus,row,column); 
   } 
  } 
} 
  
 
 
class abstractModel extends AbstractTableModel { 
  
    private String[] headers = null; 
    private Vector values; 
 
     public abstractModel(String[] headers) 
    { 
     this.headers = headers; 
        this.values = new Vector(); 
    } 
     
    public abstractModel(String[] headers,Vector values) 
    { 
     this.headers = headers; 
        this.values = values; 
    } 
     
     public abstractModel() 
    { 
        this.values = new Vector(); 
    } 
 
    public void addRow(Vector newRow) 
    { 
        values.add(newRow); 
        fireTableRowsInserted(values.size()-1, values.size()-1); 
    } 
 
 
    public void setValueAt (Object o,int r,int c) { 
     ((Vector)values.elementAt(r)).setElementAt(o,c); 
    } 
 
    public void deleteRow(Vector row) 
    { 
        int index = values.indexOf(row); 
        values.remove(row); 
        fireTableRowsDeleted(index, index); 
    } 
     
    public boolean isCellEditable(int row, int col) {return col==0;} 
    public int getRowCount() { return values.size(); } 
 
    public int getColumnCount() { return headers.length; } 
  
    public String getColumnName(int c) { return headers[c]; } 
    
    public Object getValueAt(int row, int col) { 
        return ((Vector)values.elementAt(row)).elementAt(col); 
    } 
     /*public Class getColumnClass(int c) { 
     	if (getValueAt(0, c) instanceof Boolean ) { 
        
         try {return Class.forName("java.lang.Boolean" );} catch (Exception e) {return null;} 
        
        
     	} else { 
       return getValueAt(0, c).getClass(); 
     	} 
       
     }*/ 
} 
 
Marsh Posté le 16-12-2003 à 14:55:38
t'es sur qu'il s'agis d'une instance de Boolean? 
 
| public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus,int row, int column) {  | 
 
 
je pense plutot a un JCheckBox vu que c'est lui que tu ajoute a ta cellule ( si j a bien compris) 
dans ce cas precis il faudrait plutot faire 
 
| public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus,int row, int column) {  | 
 
Marsh Posté le 16-12-2003 à 15:26:53
Je ne pense pas que ça marche, vu que la case à l'apparence d'un checkbox (DefaultCellEditor) mais la valeur est true ou false
Marsh Posté le 16-12-2003 à 15:50:29
la valeur ca doit etre le resultat de checkbox.toString() mais c'est bien une instance de checkbox verifie avec instanceof
Marsh Posté le 16-12-2003 à 09:42:35
Bonjour,
j'ai créé un JTable. Dans une dès colonnes, j'ai inséré un JCheckBox. Je n'ai aucun souci pour sélectionner les cases etc, par contre, je n'arrive pas à lui affecter une couleur.
J'ai utiliser setBackground mais la couleur apparait uniquement lorsque je clique sur le cb
J'ai définie la méthode getTableCellRendererComponent du DefaultRenderer du table, j'arrive à modifier les autres colonnes mais pas celle contenant le cb
Merci de votre aide