JXTable中的自定义标题渲染器?

时间:2014-12-16 01:51:15

标签: java swing jtable swingx jxtable

我正在使用JTable#setDefaultRenderer设置在Swing中呈现的自定义。

据我所知,在SwingX中,此方法应该传递DefaultTableRenderer的实例。如果我需要非常自定义的绘图,我可以使用自定义DefaultTableRenderer

初始化ComponentProvider

即。渲染器功能已移至提供者的。

现在怎么处理标题?

在Swing中我正在做

getTableHeader().setDefaultRenderer(new MyHeaderRenderer());

我应该在SwingX中做些什么?再次使用DefaultTableRenderer

1 个答案:

答案 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); } ... } 。表格标题仍然是JTableHeaderDefaultTableRenderer方法,据我所知,它未被覆盖),并且仍然需要将TableCellRenderer兼容对象设置为默认渲染器。< / p>