2016-03-22 5 views
0

In meinem Jtable habe ich eine Spalte mit boolean Werte als Checkbox angezeigt. Ich habe die JtableTableCellRenderer und finden Sie den Code hinzugefügt:JTable Zelle mit boolescher Datentyp

TableCellRenderer tableCellBoolean = new DefaultTableCellRenderer() { 
     Boolean UserEnterValuse = new Boolean(false); 

     public Component getTableCellRendererComponent(JTable table, 
       Boolean value, boolean isSelected, boolean hasFocus, 
       int row, int column) { 
      if (value instanceof Boolean) { 
       UserEnterValuse = Boolean.valueOf(value.toString()); 
       System.out.print(table.getCellRenderer(row, column)); 
       //InstallmentDate.get 
       table.setValueAt(UserEnterValuse, row, column); 

      } 
      return super.getTableCellRendererComponent(table, value, isSelected, 
        hasFocus, row, column); 
     } 
    }; 

ich auch hinzugefügt haben setCellEditor, aber wenn ich auf der Jtable Zelle klicken dann zeigen sie mir die Checkbox und nach der Auswahl oder die Werte in der Zelle ändert es zeigt mir wahr oder falsch, je nach auswahltyp, aber zeigt mir nicht Checkbox.

Wenn ich nicht hinzufügen TableCellRenderer und auch wenn ich die Werte auf Jtable Zelle setzen gibt es mir Fehler: Object can not cast to Boolean Type.

+1

, warum Sie mit Renderer und Editor stören, ist dies in APIs standardmäßig implementiert für weitere Informationen Oracle-Tutorial zu lesen Wie Tabellen (Teile über Modell, Renderer und Editor), zum Bearbeiten von Code-Beispielen verwenden – mKorbel

+1

Beispiel JTable mit booleschen CheckBoxen: [Beispiel] (http://stackoverflow.com/questions/7391877/how-to-add-checkboxes-to-jtable-swing) –

Antwort

1

Zuerst verwenden Sie die falsche Methodensignatur.

// wrong 
public Component getTableCellRendererComponent(JTable table, 
      Boolean value, boolean isSelected, boolean hasFocus, 
      int row, int column) { 

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

Um ein Kontrollkästchen anzuzeigen, müssen Sie das Kontrollkästchen in Ihrem Renderer erweitern. Hier ist der korrekte Renderer für boolesche Werte (es ist ein leicht modifizierter Renderer aus der JTable-Quelle).

public class BooleanRenderer extends JCheckBox implements TableCellRenderer { 
    private static final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); 

    public BooleanRenderer() { 
     super(); 
     setHorizontalAlignment(JLabel.CENTER); 
     setBorderPainted(true); 
    } 

    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()); 
      setBackground(table.getBackground()); 
     } 
     setSelected((value != null && ((Boolean)value).booleanValue())); 

     if (hasFocus) { 
      setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); 
     } else { 
      setBorder(noFocusBorder); 
     } 

     return this; 
    } 
}