Newsgroup: it.comp.java
Titolo: [Swing/JTable]Problemi con il cellrenderer per celle di tipo check-box

salve a tutti,
sto cercando di utilizzare un mio cellrenderer per una JTable.
Questo renderer deve visualizzare un check-box e colorare alternativamente
le celle della tabella (se non avessi l'esigenza di colorare le celle potrei
usare il cellrenderer di default che funziona benissimo)
Ecco la mia classe cellrenderer:
---------------------------------------------INIZIO
CODICE------------------------------------------------------
public class RisultatiDistinteTableCellRendererCheckBox extends JComponent
implements TableCellRenderer{
        private TableRisultatiDistinte myTable;        //Sottoclasse di
JTable
        private Configuration config;                         //Mio oggetto
di configurazione (non ha importanza in questo contesto)
        private final float hue;
        private final float saturation;
        private final float bright;
 public RisultatiDistinteTableCellRendererCheckBox(TableRisultatiDistinte
t,Configuration c){
  super();
                myTable=t;
                this.config=c;
                this.hue = config.getHue();
                this.saturation = config.getSaturation();
                this.bright = config.getBrightness();
 }
 public Component getTableCellRendererComponent(JTable table,
                                               Object value,
                                               boolean isSelected,
                                               boolean hasFocus,
                                               int row,
                                               int column)
 {
  Component defaultCell;
                defaultCell=(JCheckBox)new JCheckBox("", ((Boolean)
value).booleanValue());
                setAlignmentX(JComponent.CENTER_ALIGNMENT);
                if (isSelected == false)
  {
   if ((row % 2) == 0)
   {
                              defaultCell.setBackground(Color.white);
                        }
                        else
                        {
defaultCell.setBackground(Color.getHSBColor(hue,saturation,bright));
                        }
                }
                setOpaque(true);
  return defaultCell;
 }
}
---------------------------------------------FINE
CODICE------------------------------------------------------
Il problema è che vedo il check-box posizionato tutto a sinistra nella
cella. Quando clicco sulla cella il checkbox appare al centro (come dovrebbe
essere) ma al rilascio ritorna sulla sinistra. Il valore che visualizza è
corretto solo la posizione del checkbox è sbagliata.
Non riesco a capire dove sbaglio.... qualcuno sa aiutarmi?
Bye
Johnny

Non riesco a capire dove sbaglio.... qualcuno sa aiutarmi?
Il primo metodo che mi viene in mente.
Fa in modo che il tuo CellRenderer sia un JPanel (ad esempio) contenente un 
JCheckBox "centrato".
-- 
Ciao
	Fabrizio C.

 Fabrizio C.
Bye
Johnny

> un JCheckBox "centrato".
Mi sono accorto di averti scritto delle parziali inesattezze.
Poi avevo anche un dubbio, cosě... sono andato a vedere i sorgenti di 
JTable.
Potresti partire da questa mia scopiazzatura di detti sorgenti.
class MyBoolRenderer extends JCheckBox implements TableCellRenderer {
    public MyBoolRenderer() {
        super();
        setHorizontalAlignment(JLabel.CENTER);
    }
    public Component getTableCellRendererComponent(JTable table, 
                                                   Object value, 
                                                   boolean isSelected, 
                                                   boolean hasFocus, 
                                                   int row, int column) {
        if (isSelected) {
            setForeground(table.getSelectionForeground());
            super.setBackground(table.getSelectionBackground());
        } else {
            setForeground(table.getForeground());
            if ((row % 2) == 1) {
                setBackground(Color.YELLOW);
            } else {
                setBackground(table.getBackground());
            }
        }
        setSelected((value != null && ((Boolean)value).booleanValue()));
        return this;
    }
}
Quando non si sa bene come fare, guardare i sorgenti delle varie classi č 
un tour molto istruttivo ;-)
HTH
-- 
Ciao
	Fabrizio C.