私は従来の JavaTableCellRenderer
アプローチを使用し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])
}
}
残念ながら、これにはメモリ リークがあるようです。おそらく、テーブル内のすべてのセルに対して新しい Component インスタンスを作成しているためです (約 30k 行)。確かに、scala テーブルをJTable
(まったく同じ列とデータモデルを使用して) に置き換えると、メモリ リークがなくなります。
rendererComponent
したがって、私の質問は、独自のセルレンダラーがあると仮定してメソッドをオーバーライドするときに、どのようなコードを使用するのですか?