相关疑难解决方法(0)

难以理解swing的JTable和JTree的渲染器机制

通常,在使用JTableJTree用户写入和分配时,它是自己的特定单元格渲染器.

从中继承用户的组件是非常常见的DefaultTableCellRenderer,并实现了渲染器方法getTableCellRendererComponent.事实证明,DefaultTableCellRenderer事实上继承自JLabel,因此当调用super(在render方法中)时返回自己(this),因此用户的渲染器也可以类似地返回自己(this).

这一切都运作良好.

我的问题是它怎么样?

每次由表调用此方法时,都会为其指定不同的参数,并根据这些参数更改输出标签.如果它确实是标签的同一实例 - 不应该根据最后一次调用此方法进行更改?是不是意味着所有表格的单元格都是由同一个标签实例组成的,该标签实例保持相同的值(最后一次调用渲染器方法的值)?

我在网上搜索,并在Swing的代码中挖掘,找不到任何实际复制输出标签的克隆复制构造函数.我找不到任何证据表明(可能)swing使用反射,以便每次从头开始重新实例化渲染器.

我已经阅读了关于JTables的Swing 教程,在那里我可以找到下一行:

您可能希望表中的每个单元格都是一个组件.但是,出于性能原因,Swing表的实现方式不同.相反,单个单元格渲染器通常用于绘制包含相同类型数据的所有单元格.您可以将渲染器视为可配置的墨迹标记,该表用于将适当格式化的数据标记到每个单元格上.当用户开始编辑单元格的数据时,单元格编辑器接管单元格,控制单元格的编辑行为.

他们给出了一个暗示,我所说的确实是正确的,但不解释它是如何实现的.

我无法得到它.可以吗?

java swing jtable renderer jtree

6
推荐指数
1
解决办法
3412
查看次数

标签 统计

java ×1

jtable ×1

jtree ×1

renderer ×1

swing ×1