这是我的第一个 StackOverflow 问题,所以如果我做了/问了一些非常愚蠢的事情,请宽容!
对于 Java,特别是 swing,我是个菜鸟,而且我很难理解 TableCellRenderer 接口(interface)的 getTableCellRendererComponent 函数(与 TableCellEditor 接口(interface)的 getTableCellEditorComponent 函数类似)。具体来说,我不明白第二个参数(对象类型)的要点。这个值不是来自给定 JTable 的给定行和列吗?如果是这样,为什么还要为第二个论点烦恼呢?我已经进行了大量的谷歌搜索,但似乎没有人回答这个问题(或者也许我的大脑有一些故障的神经元,考虑到过去的历史,这并不是一个不可能的解释......)
非常感谢您的帮助!
谢谢
最佳答案
JTable
渲染是 flyweight pattern 的一个示例其中重复移动单个组件以呈现表格单元格的值。每次表确定需要渲染单元格时,表都会调用 getTableCellRendererComponent()
。由于它可能会被频繁调用,因此应注意效率。优点是对于不可见单元可以省略渲染过程。另请参阅相关 example .
附录:为什么不简单地调用 table.getValueAt(row, column)
而不是使用 value
?
当它绘制单元格时,表格的 UI 委托(delegate)(通常是 BasicTableUI
的子类)必须在不了解 TableModel
的情况下调用 prepareRenderer()
>。表的 prepareRenderer()
方法的约定(该方法确实了解 TableModel
)指定它“通过查询数据来准备渲染器”值的模型。”请参阅A Swing Architecture Overview了解详情。
关于java - getTableCellRendererComponent 参数的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18471615/