据我了解,在 SwingX 中,这个方法应该传递一个实例DefaultTableRenderer
我不会说你应该/必须/必须使用DefaultTableRenderer
,因为合同是继承自的JTable
,它需要一个符合TableCellRenderer接口的对象。
它可以是 a DefaultTableRenderer
,我们可以利用ComponentProvider<?>
基于 a 委托创建渲染器组件CellContext
,如此处所述。但它也可以是DefaultTableCellRenderer或任何满足接口的实现(例如)。
确实,setDefaultRenderer(Class class, TableCellRenderer renderer)方法被覆盖,不是为了使渲染器成为DefaultTableRenderer
实例,而是在渲染器是StringValue
接口兼容对象的情况下同步字符串表示。我们可以在源代码中看到:
public class JXTable extends JTable implements TableColumnModelExtListener {
...
/**
* {@inheritDoc} <p>
*
* Overridden to synchronize the string representation. If the renderer is of type
* StringValue a mapping it will be used as converter for the class type. If not,
* the mapping is reset to default.
*/
@Override
public void setDefaultRenderer(Class<?> columnClass,
TableCellRenderer renderer) {
super.setDefaultRenderer(columnClass, renderer);
getStringValueRegistry().setStringValue(
(renderer instanceof StringValue) ? (StringValue) renderer : null,
columnClass);
}
...
}
所以说了这么多,我认为你也没有义务DefaultTableRenderer
在表头中使用。表头仍然是一个JTableHeader(getTableHeader()
据我所知,该方法没有被覆盖),它仍然需要一个符合TableCellRenderer的对象设置为默认渲染器。