这是我的第一个StackOverflow问题,所以如果我做了一些非常愚蠢的事情,请宽容一点!
对于Java,我是一个菜鸟,特别是swing,我无法理解TableCellRenderer接口的getTableCellRendererComponent函数(与TableCellEditor接口的getTableCellEditorComponent函数类似)。具体来说,我不明白第二个参数(对象类型)的要点。这个值是不是来自给定行和列的给定JTable?如果是这样,为什么还要为第二个参数烦恼呢?我已经做了很多谷歌搜索,但没有人似乎回答这个问题(或者我的大脑有一些故障的神经元,鉴于过去的历史,这不是一个不太可能的解释......)
我很感激帮助!
由于
答案 0 :(得分:2)
JTable
渲染是flyweight pattern的一个示例,其中重复移动单个组件以呈现表格单元格的值。每次表确定需要渲染单元格时,表都会调用getTableCellRendererComponent()
。由于它可能被频繁调用,因此应该注意效率。优点是对于不可见的单元格可以省略渲染过程。另请参阅此相关example。
附录:为什么不直接拨打 table.getValueAt(row, column)
而不是使用 value
?
当它绘制单元格时,表的UI委托(通常是BasicTableUI
的子类)必须在不知道prepareRenderer()
的情况下调用TableModel
。表的prepareRenderer()
方法的合约( 知道TableModel
)指定它“通过查询数据模型的值来准备渲染器”。有关详细信息,请参阅A Swing Architecture Overview。