2011-08-24 101 views
4

我有JTable的排序功能阻塞問題;這使得空閒時間開源項目的開發時間延長了4個月。希望在這裏指出正確的方向。JTable與jgoodies排序問題

語境:我正在延長ps3mediaserver的功能添加到媒體庫與pms-mlx。媒體服務器的用戶界面已經使用swing完成。

問題:單擊JTable中的列標題時,看似隨機的列將被排序,而不是被單擊的列。

當前實現:這裏的不同組件和類被用於執行說明:

可能的解決方案:

  • 最好,我想保持目前的實現,並找出如何正確排序,但我懷疑有人可以幫助我與!?另外他們是我不得不添加的一些代碼,因爲奇怪的行爲;他們在代碼中註釋
  • 另一種選擇是將JTable完全更改爲另一個控件。我做了一些研究,但沒有找到我期望的解決方案。的約束是
    • 它必須在擺動UI
    • 優選它應該支持的數據綁定
    • 支持備用行的顏色是可嵌入
    • 行排序

在某些時候它將可以打開編輯對話框,在該對話框中必須檢索行的內容,可以編輯並且在保存時必須更新該行。

在重做整個事情之前,我想確保組件能夠處理我想要處理的所有事情。

我更習慣於在Visual Studio中使用.NET創建GUI。這是完全不同的,而且在擺動方面做得更加困難。請告訴我,我錯:)

[編輯]如果有人願意重現該問題,要麼得到源或二進制文件,啓動應用程序,瀏覽媒體庫選項卡。在Genral部分通過添加一些視頻文件導入一些視頻。轉到庫部分,單擊應用刷新列表並嘗試對錶格進行排序。

+1

導入視頻重現_your_問題?你一定是在開玩笑:-)反過來說:你把它分解成能夠證明問題的最小單位,然後有一個現實的可能性來獲得幫助。在你的鞋,我會爲TableModel實現啓動:追查/你如何讓無效columnIndices - 將賭注押在作爲的原因之一(!德國)啤酒...... – kleopatra

+0

不,不開玩笑:P(是不是真的期待任何人都能走得那麼遠;)我花了好幾個小時試圖弄清楚這件事情沒有成功,我無法在這裏描述所有的測試。我不得不繞過一些其他奇怪的行爲,因爲視圖的列與我的模型不一致,並且當例如事件被觸發時。刪除一列並不像我期望的那樣行事。這就是爲什麼我希望有人能夠指向我想要的組件並替換JTable。 – Philippe

+0

在找到代碼中的基礎錯誤之前,您沒有太多的選擇來進行挖掘。沒有,即使通過某種魔法,它開始看起來像在某個時刻工作,但它只會意外地這樣做,不保證它會堅持下去。祝你好運! – kleopatra

回答

2

這可能是有用的知道,JTable欄可以由用戶拖動。因此,視圖(JTable或子類)和模型(TableModel的實現)可能有不同的列號。類似地,與模型相比,RowSorter可能會影響視圖中的行數或行數。在How to Use Tables: Sorting and Filtering中提到了相關的轉換方法。特別是:「使用分揀機時,請務必翻譯單元格座標。」

附錄:作爲替代,請考慮org.netbeans.swing.etable.ETable或其子類org.netbeans.swing.outline.Outline,如here所示。

+0

此相關[示例](http://stackoverflow.com/questions/7137786/how -can-i-put-a-control-in-the-jtableheader-of-a-jtable/7137801#7137801)可能提供額外的見解。 – trashgod

+0

謝謝,這應該照顧。我不得不刷新表格(根據模型),因爲標題名稱在拖動時變得混亂。 TabelModel由FileDisplayTableAdapter實現,該實現實現com.jgoodies.binding.adapter.AbstractTableAdapter實現javax.swing.table.AbstractTableModel。我已經閱讀了所有可以在www上找到的東西,但都無濟於事;我會看看你鏈接的例子。 – Philippe

+0

我覺得在使用JTable綁定jgoodies框架時,有些東西不適合排序。在我發現的一個例子中,用於排序的代碼被註釋爲「禁用排序,因爲它無論如何都是錯誤的」。 – Philippe