【发布时间】:2021-01-24 08:04:05
【问题描述】:
在 Java Swing 中,我们有一个 JTable、TableModel、ColumnModel 和一个 TableCellRenderer,它们一起工作以显示一个表格。
如何提供自定义以获取基于列类的自定义单元格渲染器 - 而不是基于列索引设置渲染器。
final JTable table = new JTable(model);
table.getColumnModel().getColumn(0).setCellRenderer(new DateTimeRenderer());
table.getColumnModel().getColumn(1).setCellRenderer(new SuperDuperDoubleCellRenderer());
假设我有 20 个数字单元格!!!
上述方法可行,但我并不热衷于该解决方案,因为它会在模型更改时发生变化 - 所以它没有很好地封装到那种程度 - 这是客户端代码。
TableModel 了解底层表数据结构,它可以在其中自定义映射到复杂类型(与 DefaultTableModel 和 Vectors 不同)——它知道每列的数据类型。
public class DemoTableModel implements TableModel {
@Override
public Class<?> getColumnClass(int columnIndex) {
// date time, double, etc...
return columnInfo.get(columnIndex).getDataType();
}
}
我想做的是告诉JTable,嘿,列类(从表模型返回)是自定义日期时间类型 - 使用CustomDateTimeCellRenderer。如果是双精度,则使用自定义的SuperDuperDoubleCellRenderer。
麻烦在于挖掘源头,看看这种行为在哪里结合。
【问题讨论】:
标签: java swing jtable tablecellrenderer