0

私のJTableでは、他の列の中でも、テーブル内のレコードに単純に番号を付ける「シリアル番号」列があります。JTable列ヘッダーをクリックして行を並べ替えている間、この列を固定したいと思います。仕分けは順調に進んでいますが、「シリアルNo」が混同されています。「シリアルNo.」を残す方法はありますか?行をソートしている間に列が修正されましたか?

ご協力いただきありがとうございます。

例:

SlNo 名前
1 ジョン
2 ピーター
3 アレック

これを並べ替えた後(「名前」列をクリック)、次のようになります。

SlNo 名前
3 アレック
1 ジョン
2 ピーター

ただし、次のような結果が必要です。

SlNo 名前
1 アレック
2 ジョン
3 ピーター

4

2 に答える 2

1

独自のTableRowSorterを実装してみましたか?

並べ替えとフィルタリングをご覧ください

アップデート

私はこれをチェックするコードを掘り下げてきました。それは実行可能ですが、それを機能させるには車輪を再発明する必要があります.

デフォルトの実装では、単純に行と列の値を比較します ( getValueAt(row, column))。これは問題ありませんが、必要な決定を下すためのコンテキストは提供されません (つまり、どの行がソートされているか、行の値はどうなるかなど)など)、実際には、フィルターははるかに価値のある情報を提供します:P...

あなたが本当にオーバーライドしたいメソッドはプライベート...( DefaultRowSorter.compare)ですが、それがあなたが望むことをするかどうかはわかりません...

あなたが残した唯一の解決策はRowSorter、サブグループの並べ替えを実行するために必要なすべての情報を提供できるソリューションを最初から (から) 実装することです。テーブルモデルのようなもの、行と列が比較されています...

于 2012-09-24T06:32:16.853 に答える
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());
于 2016-01-15T13:04:03.583 に答える