Jtable et Jcheckbox, probleme de couleur

Jtable et Jcheckbox, probleme de couleur - Java - Programmation

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

Reply

Marsh Posté le 16-12-2003 à 09:42:35   

Reply

Marsh Posté le 16-12-2003 à 11:23:18    

code?

Reply

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();
      }
       
     }*/
}
 

Reply

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


 
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) {
   
   
    if (value instanceof JCheckBox) {                    
      JCheckBox checkBox = (JCheckBox)value ;
      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);
   }
  }


Reply

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

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed