2010-11-23 19 views
2

Ich bin klar, etwas falsch zu machen. Meine Vermutung wäre die Komponente, aber hier ist das Problem. Das ist mein CellRenderers:Zeilenauswahlfunktion nach Verwendung eines CellRenderers deaktiviert

public class WildcardCellRenderer implements TableCellRenderer { 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) { 

     JTextField c = new JTextField(); 
     c.setBorder(javax.swing.BorderFactory.createEmptyBorder()); 

     if(vColIndex == 2){ 
      if((Integer)value == 0) c.setText("No") ; 
      else c.setText("Si"); 
     } else c.setText(value.toString()); 

     return c; 
    } 

} 

und das ist, wie ich das Ding in meinem Panel einzurichten:

this.table.setDefaultRenderer(Object.class, new WildcardCellRenderer()); 

Das Problem ist, dass, wenn ich diese Renderer einrichten die Zeilen unselectable werden. Sollte ich eine andere Komponente verwenden, um anzuzeigen, was ich anzeigen muss? Grundsätzlich zeige ich einen 0/1-Wert als No/Yes-Wert an.

Antwort

4

Sie müssen die „isSelected“ Wert Rechnung zu tragen und die Hintergrundfarbe entsprechend wie folgt aufgebaut:

if (isSelected) { 
     c.setBackground(table.getSelectionBackground()); 
     c.setForeground(table.getSelectionForeground()); 
    } 
    else { 
     c.setBackground(table.getBackground()); 
     c.setForeground(table.getForeground()); 
    } 

ich dies nahm von einem meiner ListCellRenderers, aber ich nehme an, es funktioniert genauso mit den TableCellRenderers .

Oh und BTW, können Sie das Textfeld wiederverwenden, es besteht keine Notwendigkeit, ein neues Textfeld für jede Zelle zu erstellen, so dass Sie das Textfeld zu einem Mitglied Ihrer Klasse machen und innerhalb der Methode nur etwas in Ihrem Text ändern können Feld wie Inhalt/Farbe und zurückgeben. Auf diese Weise enden Sie nicht mit einer Million Textfield-Instanzen auf einem großen Tisch.

+0

Dank Kumpel. Das war's. Ich habe nicht aus Tutorials gelernt, dass Sie alles neu definieren müssen. – dierre

Verwandte Themen