【发布时间】:2010-11-14 18:22:54
【问题描述】:
我一直在使用传统的 Java TableCellRenderer 方法在 scala.swing.Table 中提供渲染器,我在表的 TableColumnModel 上声明了我的渲染器。代码如下:
val myTable = new Table {
lazy val tcm = initColumnModel
peer.setColumnModel(tcm)
override
protected def rendererComponent(sel: Boolean, foc: Boolean, row: Int, col: Int) = {
//GET THE VALUE FROM THE TableModel
val value = model.getValueAt(
peer.convertRowIndexToModel(row),
peer.convertColumnIndexToModel(col))
//GET THE RENDERER FROM THE ColumnModel
val renderer = tcm.getColumn(col).getCellRenderer
//WRAP IN A COMPONENT
Component.wrap(renderer.getTableCellRendererComponent(
peer,
value,
sel,
foc,
row,
col).asInstanceOf[JComponent])
}
}
不幸的是,这似乎存在内存泄漏 - 大概是因为我正在为表中的每个单元格(约 30k 行)创建一个新的 Component 实例。当然,当我用 JTable(使用完全相同的 column 和 data 模型)替换我的 scala 表时,我的内存泄漏就消失了。
因此,我的问题是,假设一个人拥有自己的单元格渲染器,人们在覆盖 rendererComponent 方法时会使用什么样的代码?
【问题讨论】:
标签: swing scala jtable tablecellrenderer