2012-09-24 62 views
0

在我的JTable的其他列中,我有一個「序列號」列,它只是對錶中的記錄進行編號。點擊JTable列標題對行進行排序時,我希望修正此列。排序正在發生,但是「序列號」在這個過程中變得混亂起來。有什麼方法可以保留「序列號」列固定,而我排序行?在不更改「Sl號」列的情況下排序的JTable行

感謝您的幫助。

例子:

SlNo名稱
約翰
彼得
3阿列克

通過(點擊 '名稱' 列)排序在此之後,我得到這個:

SlNo名稱
3阿列克
1約翰
彼得2

不過,我想結果:

SlNo名稱
1阿列克
約翰二
3彼得

+1

確保幾乎所有的東西是可能的,但不知道該怎麼做......,以便更快地發佈[SSCCE](http://docs.oracle.com/javase/tutorial/uiswing/index。HTML)顯示你的問題'RowSorter'的混合輸出 – mKorbel

+0

不太明白:給出行與si == 0,1,2 ...排序後,你想發生的另一列是什麼?保持原樣(如從上到下的簡單計數)或使其跳轉到現在排序的行(如行標識符)?後者是默認的,前者略有不同尋常.. – kleopatra

+2

感謝您的澄清:-)你可能想看看http://tips4java.wordpress.com/2008/11/18/row-number-table/ – kleopatra

回答

1

您是否嘗試實現自己的TableRowSorter

看一看Sorting and Filtering

UPDATE

我一直在周圍挖了代碼檢查了這一點。這是可行的,但你將不得不重新發明輪子才能使它運作起來。

默認實現只是簡單地將行/列值比較在一起(getValueAt(row, column)),這很好,但沒有提供任何上下文來做出您需要做出的決定(即哪個行被排序,行值可能是等),實際上過濾器提供了更有價值的信息:P ...

你真的想要覆蓋的方法是私人...(DefaultRowSorter.compare),但我不確定它將做任何你想要的任何方式...

你留下的唯一的解決方案是實施你的解決方案從頭開始(從RowSorter),能夠爲您提供所有t他需要的信息才能執行子組排序。如表模型,行和列的東西進行比較......

+3

嗯......這看起來有點像評論,是不是:-) – kleopatra

+0

@kleopatra它可以是如果你喜歡,沒有時間看演示 – MadProgrammer

+0

@MadProgrammer(即使我upvoted),[看請點擊這裏(前兩點)](http://stackoverflow.com/a/12583887/714968) – mKorbel

0

一個非常簡單的實現,這將是

public class siNo implements RowSorterListener { 
    JTable table; 
    public siNo(JTable table) { 
     this.table = table; 
    } 

    @Override 
    public void sorterChanged(RowSorterEvent e) 
    { 
     for (int i = 0; i < table.getRowCount(); i++) { 
      table.setValueAt(Integer.toString(i+1), i, 0); 
     } 
    } 
} 

你的類,它包含表

sorter.setSortable(0, false); 
sorter.addRowSorterListener(new siNo()); 
相關問題