将TableRowSorter与scala.swing.Table一起使用



我正在开发一个简单的UI,它有一个scala.swing.Table组件。我想使用java.swing.table.TableRowSorter对表格行进行排序。table类没有提供任何用于使用行排序器的API,所以我尝试直接在对等上设置它

val table = new Table(height, width) {
  import javax.swing.table._
  rowHeight = 25
  autoResizeMode = Table.AutoResizeMode.NextColumn
  showGrid = true
  gridColor = new java.awt.Color(150, 150, 150)
  model = myModel
  peer.setRowSorter(new TableRowSorter(model))
}

现在,当我点击列标题时,我会看到小的向上/向下箭头,但表内容不会随着新的排序顺序而更新。如果在单击列标题时选择了一行,则所选内容将根据排序顺序移动到所选内容所在的行。我添加了自定义比较器,它们按预期调用,所以排序确实在进行,但表没有更新。

我是不是错过了一些更新表格的内容?访问底层JTable对等对象是否合法?

回答我自己的问题。

scala.swing.Table类不支持Java 6中添加的行排序功能。请参阅第277行的Table.scala源文件:

def apply(row: Int, column: Int): Any = model.getValueAt(row, viewToModelColumn(column))
// TODO: this is Java 6 stuff
// def apply(row: Int, column: Int): Any = model.getValueAt(viewToModelRow(row), viewToModelColumn(column))
//def viewToModelRow(idx: Int) = peer.convertRowIndexToModel(idx)
//def modelToViewRow(idx: Int) = peer.convertRowIndexToView(idx)

我将scala.swing文件移到另一个包中,并将其构建到我的项目中,然后取消Java 6的注释,并注释掉旧的apply()方法,现在表排序就可以工作了。

这里有一个关于这个错误报告的链接。Java 6代码在8月份被添加,然后被删除,直到Scala库构建切换到Java 6。

最新更新