Newsgroup: it.comp.java
Titolo: Multicolor Jtable

salve a tutti,
ho una jtable e sulle righe di una colonna vorrei piazzare dei colori
estendendo la DefaultTableCellRenderer riesco a colorare la cella di una 
riga a seconda di determnate condizioni
tramite il   setBackground( "mio_colore" );
perň vorrei avere piů colori nella stessa cella qualcosa del tipo
-------------------------
Colonna colori
-------------------------
|colore1|colore2|coloren|
-------------------------
č possibile ?
grazie 10000

Nessuno te lo vieta,
i renderer non fanno altro che preparare un oggetto che poi verrà appunto
renderizzato nell'immagine finale che a noi appare come una tabella.
Ti crei un tuo cellRendere, dove memorizzi in una struttura (Vector,
Hashtable, etc.) i colori, in base al numero della riga che ti arriva,
setti un colore oppure un'altro.
public class MyCellRenderer extends JLabel implements TableCellRenderer
{
    private Vector colors = new Vector(10);
    public MyCellRenderer()
    {
        super();
 
        initColors(); // Ti fai un metodo che ti prepara la tabella colori
    }
    // Non le API del JDK sotto mano, e non mi ricordo tutti i parametri
    // quindi non prendere assolutamente per buona la dichiarazione di 
    // questo metodo
    public Component getCellRenderer(Jtable table, Object value, 
                                     int row, int col,
                                     boolean isSelected)
    {
        setTect(value.toString());
        if(isSelected)
        {
            // dove i due metodi: "getBackColor" e "getBackColor"
            // che ti devi implementare, tornano un colore
            // in base al numero della colonna o della cella
            // in base ai parametri che gli passi
            setBackground(getBackColor(col));
            setForeground(getForeColor(col));
        }
        else
        {
            setBackground(table.getBackground());
            setForeground(table.getForeground());
        }
        return this;
    }
}
Ok?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 setti un colore oppure un'altro.
Grazie per la risposta ma forse non sono stato chiaro (oppure non ho 
capito:),io vorrei che all'interno di una cella ci fossero più colori
il metodo setBackground(colore) mi colora una cella intera non riesco
a suddivire la cella in n parti da colorare!
come ho descritto su mi servirebbe ho una colonna "colori"
------------------------------------------------------------------------
|        colonna_Colori       | colonna_descrizione1  |    altreinfo   |
------------------------------------------------------------------------
| coloreA -coloreB -coloreZ   | riga1_descrizione     | riga1_altreinfo|	
------------------------------------------------------------------------
| coloreD -coloreF -coloreH   | riga2_descrizione     | riga2_altreinfo|	
spero di essere stato un po più chiaro.
grazie

In questo caso hai una sola possibilità e non è tanto facile:
Devi essenzialmente estendere un Component qualsiasi, e ridefinire il
metodo "public void paint(Gragphics g)", al fine di disegnarti da solo lo
sfondo.
Non è difficile ma non è nemmeno così facile da fare, il vero problema è
il calcolo delle dimensioni dei Font e della posizione iniziale in cui
cominciare a disegnare il testo.
Es:
public class MyCellRenderer extends JPanel implements TableCellRenderer
{
  public MyCellRenderer()
  {
    super();
  }
  public Component getCellRenderer(Jtable table, Object value,
                                   boolean isSelected, boolean hasFocus
                                   int row, int col)
  {
    if(!isSelected)
    {
      // Questi due metodi ti servono sempre per gestire i colori
      // di una cella in caso normale
      setBackground(getBackColor(row, col));
      setForeground(getForeColor(row, col));
    }
    else
    {
      // Cella selezionata, che mostra i colori normali
      setBackground(table.getBackground());
      setForeground(table.getForeground());
    }
    return this;
  }
  // devi ridefinire il metodo paint
  // ma se invece di estendere un Component, estendi un JComponent
  // allora devi ridefinire il metodo paintComponent
  // avendo cura di richiamare il metodo della classe genitore prima 
  // di fare qualunque altra operazione, questo per evitare strani
  // ed imprevisti effetti grafici (vedi note SUN)
  public void paintComponent(Graphics g)
  {
     super.paintComponent(g);
 
     // Da qui buon divertimento con la grafica.
     // ti consiglio vivamente i tutorial della sun sulle API Graphics2D


 
[CUT]
A parte qualche piccolo problema di repaint il tutto sembra funzionare
grazie 1000!