我需要一個插入行爲不同於TableRowSorter/DefaultRowSorter提供的JTable。當需要自定義插入行爲時,是否必須自定義RowSorter的實現?
我需要一個表格,以便當用戶插入一行時,新插入的行應該在光標所在的位置下方,並且光標位於新插入的行位置。 讓我說明它的一個示例:
初始狀態 - 表有4行:
0. Row 1
1. Row 2 <-- cursor here
2. Row 3
3. Row 4
用戶光標位於第2行,用戶觸發插入。新插入的行出現在下方,光標也移動到那裏:
0. Row 1
1. Row 2
2. New row <-- cursor here
3. Row 3
4. Row 4
我很清楚我有兩種方法來解決此問題。
第一種方法是更改我的模型,因此插入在模型中的正確位置完成。我不喜歡這個解決方案,因爲它意味着模型索引將在插入的行下面的所有行中改變。這是最簡單的方法來完成我所需要的,但是,正如我所說的,代價是由於模型索引更改造成潛在的大開銷...
第二種方法是實現RowSorter,它將維護自己的videToModel []和modelToView []數組,並在插入行時保持正確的順序。當然,我開始通過擴展TableRowSorter,但問題是,modelToView和viewToModel是私有陣列,我無法訪問它們,所以我有問題時行過濾...
我想避免編寫我自己的RowSorter實現,因爲這需要時間把事情做對......
更新2013年10月7日: 我已經實現我自己的RowSorter的做到了這一點。經過兩種方法的實驗後,我意識到第二種方法給了我更多的靈活性。
您是否知道在模型中插入數據的具體性能指標?如果沒有,我傾向於第一個選項 - 使用正確的模型索引(從所選行的視圖索引轉換)調用DefaultTableModel.insertRow()。 –