Java JComboBox图标

时间:2015-03-13 14:00:56

标签: java swing jtable boolean jcheckbox

在JTable中显示数据。一列用作字段复选框。问题是显示ChceckBox中的图标不是true / false。我该如何解决这个问题?

添加数据:

private DefaultTableModel headermodel = new DefaultTableModel();
private JScrollPane scrollHeader = new JScrollPane();
private JTable headerTable = new JTable();

 public void loadHead(){


        header = model.getHead();

        int ids=0;
        int id=1;

        for(String head: header) {
            headermodel.addRow(new Object[]{id,head});
            headerMap.put(ids,head);
            id++;
            ids++;
            count++;
         }
        header.clear();

    }

并在JTable中显示数据:

    headerTable = new JTable(headermodel);
    headermodel.addColumn("Lp.");
    headermodel.addColumn("Column Name");
    headermodel.addColumn("Constraint");
    headermodel.addColumn("Sum");
    scrollHeader = new JScrollPane(headerTable);

    TableColumnModel tcm = headerTable.getColumnModel();

                tcm.getColumn(2).setCellEditor(new DefaultCellEditor(new JCheckBox()));
                tcm.getColumn(3).setCellEditor(new DefaultCellEditor(new JCheckBox()));
                tcm.getColumn(3).setCellRenderer(headerTable.getDefaultRenderer(boolean.class));

add(scrollHeader);

enter image description here

1 个答案:

答案 0 :(得分:3)

模型的getColumnClass(int columnIndex)方法应返回Boolean.class以获取相应的列索引,以便呈现器知道为该列呈现复选框。例如,......

DefaultTableModel headermodel = new DefaultTableModel(){

    @Override
    public Class<?> getColumnClass(int columnNumber) {
       if (columnNumber == 2 || columnNumber == 3) {
          return Boolean.class;
       } else {
          return super.getColumnClass(columnNumber);
       }
    }
}

您不必为此设置这些列的单元格渲染器,因为默认的单元格渲染器将适当地处理Boolean.class