我正在使用JTable#setDefaultRenderer
设置在Swing中呈现的自定义。
据我所知,在SwingX
中,此方法应该传递DefaultTableRenderer
的实例。如果我需要非常自定义的绘图,我可以使用自定义DefaultTableRenderer
ComponentProvider
即。渲染器功能已移至提供者的。
现在怎么处理标题?
在Swing中我正在做
getTableHeader().setDefaultRenderer(new MyHeaderRenderer());
我应该在SwingX中做些什么?再次使用DefaultTableRenderer
?
答案 0 :(得分:1)
据我所知,在SwingX中,这个方法应该传递
DefaultTableRenderer
的实例
我不会说你应该/必须/必须使用DefaultTableRenderer
,因为合同是从JTable
继承而且需要TableCellRenderer接口兼容对象。
可以成为DefaultTableRenderer
,我们可以利用ComponentProvider<?>
根据{{1}来委派渲染器组件创建},正如here所解释的那样。但它也可以是DefaultTableCellRenderer或满足界面的任何实现(for example)。
确实覆盖setDefaultRenderer(Class class, TableCellRenderer renderer)方法,而不是使渲染器成为CellContext
实例,而是在渲染器是符合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);
}
...
}
。表格标题仍然是JTableHeader(DefaultTableRenderer
方法,据我所知,它未被覆盖),并且仍然需要将TableCellRenderer兼容对象设置为默认渲染器。< / p>