这是我的第一个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。