我正在使用 Glazed 列表,jTable
其中我有一个布尔列。默认情况下,jTable
呈现一个复选框,其中列是 type Boolean.Class
。使用 Glazed 列表我无法获得所需的复选框。我渲染了扩展的复选框,DefaultTableCellRenderer
但我对它不满意,因为复选框不是“可点击的”。
在 GL 常见问题解答http://www.glazedlists.com/documentation/faq我发现:
*问:如何指定我的布尔表格单元格使用复选框呈现?出于某种原因,Glazed Lists 没有 getColumnClass() 方法。
A:如果需要指定列类,需要实现AdvancedTableFormat接口,而不是常规的TableFormat类。如果您使用 GlazedLists.tableFormat() 工厂方法,则必须指定基对象的类才能正确实现 AdvancedTableFormat.getColumnClass() 方法。*
你们中的一些人有这方面的经验吗?我没有找到任何示例链接。常见问题解答中的基本链接已损坏。
我试过这个:
public class CheckBoxTableModel implements AdvancedTableFormat {
public Class getColumnClass(int column) {
if(column==4)
return Boolean.class;
else
return Object.class;
}
}
请帮忙!
编辑:我试过这个,带有jtable的表格没有显示
private class TicketTableFormat implements AdvancedTableFormat<Ticket> {
private final String[] cols = new String[]{"Id", "From", "Subject", "Date", "Incomplete"};
public int getColumnCount() {
return cols.length;
}
public String getColumnName(int colId) {
return cols[colId];
}
public Class getColumnClass(int col) {
if (col == 4) {
return Boolean.class;
} else {
return Object.class;
}
}
public Object getColumnValue(Ticket ticket, int colId) {
switch (colId) {
case 0:
return ticket.getId();
case 1:
return ticket.getFrom();
case 2:
return ticket.getSubject();
case 3:
return ticket.getDate();
case 4:
return ticket.getIncomplete();
}
return null;
}
public boolean isEditable(Ticket e, int col) {
if (col < 4) {
return false;
} else {
return true;
}
}
public Ticket setColumnValue(Ticket e, Object o, int i) {
e.setB((Boolean) editedValue);
return e;
}
public Comparator getColumnComparator(int i) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
我用这个来称呼它:
TicketTableFormat tbFormat = new TicketTableFormat();
TicketsModel = new EventTableModel(textFilteredTickets, tbFormat);
ticketTable.setModel(TicketsModel);