2011-12-14 33 views
4

如何強制某些表格行位於已排序的JTable的末尾?例如,如果有人點擊列標題按該列進行排序,那麼無論排序順序如何,我都會在表的末尾添加一些行。我會如何去做這件事?Java Swing:將某些項目強制排序後的JTable的末尾

謝謝!

+1

你如何設置你的JTable?有一個自定義的TableModel在幕後操作,還是使用DefaultTable模型? – jpalm 2011-12-14 01:04:07

+0

那麼,爲了創建一個JTable,你需要將一個對象數組傳遞給構造器,對嗎?如果你實現了一個排序方法,使最後一行沒有排序,然後你啓動它,你可能會實現你想要的功能。 – eboix 2011-12-14 01:09:51

+0

使用RowSorter和自定義比較器可以很容易地解決這個問題。有關更多信息,請參閱[這裏](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting)。沒有一些代碼,我們不能提供具體的答案。 – jpalm 2011-12-14 01:15:37

回答

1

如果您爲表格使用DefaultTableModel,那麼您可以使用moveRow(startRow,endRow,destinationPosition)API將相關的行/行移動到您想放置在JTable中的任何位置。每次對錶進行排序(定義一個偵聽器)時,您都必須這樣做。

你可以參考這個問題:Moving a row in jTable如圖How to Use Tables: Sorting and Filtering這是一種相關

1

您可以實現Comparator接口,或實現Comparable接口,如本exampleValue類。無論採用哪種方法,您都可以通過一種方式改變比較方法的結果,使得所需的行在所有其他行之後出現。

附錄:作爲@克列奧帕特拉的answer便籤,Comparator必須在表的RowSorter的環境中應用,而Comparable的實施會影響natural ordering。由於結果複雜且難以維護,您可能需要考慮另一種方法。

1

請注意:這不是一個答案,只是一種存在的困難和一些鏈接總結。

這是令人驚訝的難以解決的任務之一。核心(即使在SwingX :-)中也不支持它。特別是比較器沒有幫助,因爲它不知道排序方向的任何內容,即它不知道它是否應該在頂部或底部找到特定的行。唯一能夠這樣做的合作者可能是RowSorter。由於DefaultRowSorter中的所有內容都被隱藏起來,所以調整歸結爲完全重新實現。 OTN上的handle nulls had been published by Walter Laanlater described to be tweaked中關於更復雜上下文的示例。

相關問題