【发布时间】:2011-04-20 09:37:11
【问题描述】:
我正在使用 Glazed 列表,在 jTable 中我有一个布尔列。
默认情况下,jTable 呈现一个复选框,其中列类型为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);
【问题讨论】:
-
应该可以,您确定 4 是布尔列的索引(索引从零开始,即第一个 == 0)?
-
是的,我知道。 :( 只打印值 true/false 没有复选框:/
-
不确定是否有帮助,但死链接应该指向here。
-
只是为了仔细检查是否按预期调用了 advancedFormat:在 if 块中添加一个 println(column) (并使其成为一个块以确保您在其中)。
-
当我添加EventTableModel(egList,objCheckBoxTableModel)时,jtable所在的表单不显示。
标签: java swing glazedlists