getTableCellRendererComponent

getTableCellRendererComponent

这是我的第一个StackOverflow问题,因此,如果我做/问一件令人难以置信的愚蠢事情,请宽容!

对于Java,尤其是秋千,我是一个菜鸟,对理解TableCellRenderer接口的getTableCellRendererComponent函数(以及与TableCellEditor接口的getTableCellEditorComponent类似)有困难。具体来说,我不明白第二个参数(对象类型)的意义。这个值不是仅来自给定行和列的给定JTable吗?如果是这样,为什么还要打扰第二个参数呢?我已经做了大量的Google搜索工作,但是似乎没有人回答这个问题(或者我的大脑中有一些神经元出现故障,鉴于过去的历史,这不太可能是一种解释...)

我将不胜感激!

谢谢

最佳答案

JTable呈现是flyweight pattern的示例,其中重复移动单个组件以呈现表单元格的值。每当表确定需要渲染单元格时,表就会调用getTableCellRendererComponent()。正如人们常说的那样,应特别注意效率。优点是可以为不可见的单元省略渲染过程。另请参见与此相关的example

附录:为什么不只是简单地调用table.getValueAt(row, column)而不是使用value

绘制单元格时,表的UI委托(通常是BasicTableUI的子类)必须在不了解prepareRenderer()的情况下调用TableModel。具有prepareRenderer()知识的表的TableModel方法的协定指定其“通过查询数据模型的值来准备渲染器”。有关详细信息,请参见A Swing Architecture Overview

10-08 12:38