2010-06-13 5 views
0

J'ai une classe qui contient un champ booléen. J'affiche dans une JTable une liste de ces classes. J'ai créé un CustomCellRenderer pour changer la couleur d'arrière-plan des lignes, donc je pourrais avoir différentes couleurs. Le problème: lorsque le customrenderer est appliqué sur le champ booléen, (true/false) est affiché à la place de la case à cocher du renderer par défaut.Comment invoquer DefaulCelleRenderer à partir d'un CustomCellRenderer pour une cellule JTable spécifique

Comment puis-je avoir les deux fonctionnalités: couleurs d'arrière-plan et case à cocher?

est ici le code CustomRenderer:

public class CustomCellRenderer extends DefaultTableCellRenderer { 

    public Component getTableCellRendererComponent(JTable table, Object obj,boolean isSelected, boolean hasFocus, int row, int column) { 

     Component cell = super.getTableCellRendererComponent(table, obj,isSelected, hasFocus, row, column); 

     if (isSelected) { 
      cell.setBackground(Color.red); 
     } else { 
      if (row % 2 == 0) { 
       cell.setBackground(new Color(110,134,214)); 

      } else { 
       cell.setBackground(Color.lightGray); 

      } 
     } 
     return cell; 
    } 
} 

merci à l'avance pour toute aide.

Répondre

0

Je l'ai eu.

Je trouve ceci:

add a check box to only one cell in a JTable

J'ai utilisé le BooleanRenderer que j'ai appelé de la méthode getTableCellRendererComponent du CustomCellRenderer.

Je viens d'ajouter une ligne dans cette méthode, le délégué du rendu:

public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     //delegate if boolean 
     if(value instanceof Boolean) return booleanRenderer.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column); 
     if (isSelected) { 
      setBackground(selectedColor); 
      setForeground(unSelectedColorWhite); 
     } else { 
      if (row % 2 == 0) { 
       setBackground(unSelectedColorBlue); 
      } else { 
       setBackground(unSelectedColorWhite); 
      } 
      setForeground(selectedColor); 
     } 
     setText(" " + table.getValueAt(row, column)); 
     selected = isSelected; 

     return this; 
    }