在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);
答案 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
。