2012-03-06 30 views
3

我正在使用具有scala.swing.Table組件的簡單UI。我想使用java.swing.table.TableRowSorter對錶格行進行排序。所以,我想對等直接設置它的表類沒有使用一個行排序提供任何API現在使用TableRowSorter與scala.swing.Table

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對象是否合法?

+1

我有一個類似的問題,請看:[sortable-columns-in-scala-swing-table](http:/ /stackoverflow.com/questions/8911759/sortable-columns-in-scala-swing-table) – 2012-03-06 17:28:04

+1

彼得,與我一直在做的所有搜索我想知道我是如何錯過你的問題?看起來你的例子顯示了一個簡單的包裝JTable的Component支持排序,但Table類不支持排序。這意味着問題與表中的其他所有內容有關。這是一個很好的線索。 – 2012-03-06 20:13:45

回答

1

回答我自己的問題。

的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()方法和現在的表格排序工作註釋掉。

這裏是a link的bug報告。 Java 6代碼在8月份被添加,然後被刪除,直到Scala庫構建切換到Java 6.