gpt4 book ai didi

java - JXTable 中的自定义 header 渲染器?

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:13 25 4
gpt4 key购买 nike

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

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

初始化 DefaultTableRenderer

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

现在如何处理标题?

在 Swing 中我正在做

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

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

最佳答案

As I understood, in SwingX this method should be passed an instance of DefaultTableRenderer

我不会说您应该/必须/必须使用 DefaultTableRenderer ,因为合约继承自 JTable它需要 TableCellRenderer接口(interface)兼容对象。

可以DefaultTableRenderer我们可以利用ComponentProvider<?>基于 CellContext 委托(delegate)渲染器组件创建,如所解释的here 。但它也可以是 DefaultTableCellRenderer以及任何满足接口(interface)( for example )的实现。

确实是setDefaultRenderer(Class class, TableCellRenderer renderer)方法被重写,而不是使渲染器成为 DefaultTableRenderer实例,但要同步字符串表示形式,以防渲染器是 StringValue接口(interface)兼容对象。我们可以在源代码中看到:

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兼容的对象被设置为默认渲染器。

关于java - JXTable 中的自定义 header 渲染器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27496287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com