我在 jTable
中使用 Glazed 列表,其中有一列是 boolean 值。
默认情况下,jTable
呈现一个复选框,其中列的类型为 Boolean.Class
。
使用 Glazed 列表我无法获得所需的复选框。我渲染了扩展 DefaultTableCellRenderer
的复选框,但我对它不满意,因为复选框不是“可点击的”。
在 GL 常见问题 http://www.glazedlists.com/documentation/faq我发现:
*问:如何指定我的 boolean 表格单元格用复选框呈现? 出于某种原因,Glazed Lists 没有 getColumnClass() 方法。
A:如果需要指定列类,需要实现AdvancedTableFormat接口(interface),而不是常规的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);
最佳答案
这里的基本点是渲染表格单元格和编辑它们是两件不同的事情。对于表格单元格渲染,渲染器仅用作“标记”,即复选框被初始化为应渲染的状态,之后表格仅拍摄渲染器的照片(通过调用其绘制方法)并放置 tat 图片在适当的单元格中 - 为了呈现所有单元格,复选框的相同实例一遍又一遍地重新配置以表示相应的单元格值。您在代码中所做的是指定模型的数据类型风格,以便表格选择的默认表格单元格渲染器是复选框渲染器。
要使复选框可编辑,单元格编辑器必须附加到表格单元格(例如,通过为特定列配置编辑器)。如果表格单元格接收到输入焦点,表格单元格编辑器组件将被初始化并放置在表格单元格内(即在渲染器之前绘制的图像上方)。此单元格编辑器组件(在您的情况下将是一个复选框)将保留在那里(通过鼠标或键盘接受用户输入),直到用户导航离开该特定表调用。在编辑结束的那一刻,单元格编辑器被要求提供它从编辑过程中捕获的值,(即 getCellEditorValue()
在编辑器上被调用)并且 hte 值由表和写回该单元格的表模型。
所以简而言之:渲染器只是在单元格上标记数据,即输出,需要一个编辑器组件来接收输入。
关于java - 如何呈现复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5728274/