2015-06-27 53 views
2

我無法獲得以下Swing表視圖可排序。雖然我得到列標題翻轉的小三角形,該表內容不刷新任何不同,這取決於那種狀態:(J)儘管啓用了自動行分類器並使用可比較的數據,但表並未進行排序

import scala.swing._ 

val data = Array(
    Array("a", 4, 8.9), 
    Array("b", 7, 2.3), 
    Array("c", 1, 5.6) 
).map(_.map(_.asInstanceOf[AnyRef])) 

val m = new javax.swing.table.DefaultTableModel(data, 
    Array[AnyRef]("string", "int", "double")) { 

    override def getColumnClass(c: Int): Class[_] = c match { 
    case 0 => classOf[java.lang.String ] 
    case 1 => classOf[java.lang.Integer] 
    case 2 => classOf[java.lang.Double ] 
    } 
} 

val t = new Table 
t.model = m 
t.peer.setAutoCreateRowSorter(true) 

new Frame { 
    contents = new ScrollPane(t) 
    pack().centerOnScreen() 
    open() 
} 

enter image description here

我有不同的外觀和感覺測試這(截圖顯示了Nimbus)和JDK(OpenJDK 6,OpenJDK 7)。此外,我有一個自定義的樹表組件,它沒有問題,所以錯誤必須位於上面的某處。

+0

不Scala的用戶,但你可以嘗試創建,與toggleSortOrder代替setAutoCreateRowSorter(真)覆蓋RowSorter的,則可以測試是否從RowSorter的,DefaultTableModel,並JTable中的方法是入店並返回值這使得感覺 – mKorbel

回答

4

這是Scala-Swing中的一些錯誤。我爲什麼不感到驚訝?!

import scala.swing._ 

type I = java.lang.Integer 
type D = java.lang.Double 

val data = Array[Array[Object]](
    Array("a", 4:I, 8.9:D), 
    Array("b", 7:I, 2.3:D), 
    Array("c", 1:I, 5.6:D) 
) 

val m = new javax.swing.table.DefaultTableModel(data, 
    Array[AnyRef]("string", "int", "double")) { 

    override def getColumnClass(c: Int): Class[_] = data(0)(c).getClass 
} 

val tj = new javax.swing.JTable(m) // !!! 
tj.setAutoCreateRowSorter(true) 
val t = Component.wrap(tj)   // !!! 

new Frame { 
    contents = new ScrollPane(t) 
    pack().centerOnScreen() 
    open() 
} 

雖然標題說,列排序會受到影響(文本提示提交者在談論行排序),這可能是this bug。我的猜測是渲染器包裝在viewToModel/modelToView中被破壞。


編輯:確認。它所需要的是

val t = new Table { 
    // disable broken renderer 
    override lazy val peer: JTable = new JTable with SuperMixin 
} 
相關問題