2016-04-20 5 views
1

データにカスタムソートが適用されるjtableがあります。テーブルが最初に起動されるとき、ソートにはStringデータのみが含まれているので、ソートは正常に行われます。テーブル構造が変更された後(同じ列にSting( "N/A")とダブルデータの組み合わせを持つ新しい列が追加されると、カスタムソートアルゴリズムが削除されたように見える) JTableのでdefaultsortingが、混合データを持つ列は、ClassCastExceptionができます。そこに私は、すぐtableStructureChangeイベントが発生したとして、それをカスタムの並べ替えを維持するか、再適用することができる。テーブル構造が変更された後にカスタムソートをjtableに保持する

答えて

0
public void sortTable(){ 
    TableRowSorter<TableModel> sort = new TableRowSorter<TableModel>(Jtable.getModel()); 
    Jtable.setRowSorter(sort); 

    List<RowSorter.SortKey> sortKeys = new ArrayList<>(); 
    sortKeys.add(new RowSorter.SortKey(4, SortOrder.ASCENDING)); 
    sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING)); 
    sorter.setSortKeys(sortKeys); 
    } 

のこれはあなたが実際のJTableを並べ替える必要がある方法です。このコードで試してみてください。例外があれば投稿してください。

+0

並べ替えは問題ではありません。この問題は、firetableStructureChanged()メソッド呼び出しでtableStrucutureが変更されると元のカスタムソートアルゴリズムが削除され、元のソートアルゴリズムを維持するか、テーブルの構造が変更されると自動的に自動的に再適用されるように求められます。 – Amit

+1

質問にコードを入れてください。 – Priyamal

0

なぜtableStructureChangedイベントが生成されるのですか?これは、テーブルの列構造が変更されたことを意味します。hあなたは同じ列が存在することを知っていますか?

テーブルをリフレッシュする場合、なぜ新しいTableModeを作成するのですか?代わりに、テーブルからすべてのデータ行を削除することができます(つまり、DefaultTableModelでsetRowCount(0)を使用)し、新しいデータ行を挿入します。このようにしてtableStructureEventは生成されません。

その他のオプションは、ソート情報を保存し、ソーターを再作成することです。現在のソートキーは、DefaultRowSorterから取得できます。だから、基本的なロジックは次のようになります。

  1. getSortKeys()
  2. リフレッシュするTableModel
  3. setSortKeys(...)

チェックアウトソーターを再作成:ワーキング例えばTrying to get the sorter positon to retain after a table refresh

関連する問題