2016-03-22 10 views
0

私のJtableには、booleanという値を持つコラムがCheckboxと表示されています。私はJtableTableCellRendererを追加し、次のコードでいますブール型データ型のJTableセル

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); 
     } 
    }; 

私も追加したsetCellEditorが、私はJtableセルをクリックしたとき、それは私にCheckboxと選択またはセルの値を変更した後を示し、それ選択の種類によって私の真偽を示していますが、私には表示されませんCheckbox

私はTableCellRendererを追加していませんが、値をJtableセルに設定すると、エラー:Object can not cast to Boolean Typeが表示されます。

+1

詳細は、コード実例のために、テーブル(モデル、レンダラとエディタに関する部品)の使い方Oracleのチュートリアルを読むことあなたはレンダラとエディタで悩ま、これは、デフォルトでのAPIで実装されている理由 – mKorbel

+1

の例booleanのチェックボックスを持つJTable: [例](http://stackoverflow.com/questions/7391877/how-to-add-checkboxes-to-jtable-swing) –

答えて

1

まず、間違った方法の署名を使用します。

// 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) { 

チェックボックスを表示するには、レンダラーのチェックボックスを拡張する必要があります。ブール値の正しいレンダラーは次のとおりです(これはJTableソースから少し変更されたレンダラーです)。

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; 
    } 
}