2016-10-02 2 views
1

私はJTableを実装しました。そこでは、textFieldでエントリを検索できます。ソーターが行の順序を変更した後にJTableModelを更新するには?

要求が行われると、コードでDefaultTableModelが取得され、各列と行の要素が検索され、その要素が見つかった行が選択されます。

これはうまくいきますが、並べ替えがDefaultTableModelを更新していないため、どの列をクリックしてもテーブルを並べ替えることはできません。

表には、私は小さな例を投稿することはできませんので極めて複雑と依存関係に満ちている大きなプロジェクトの一部ですが、私は、これはそれを合計すると思う:非のフルDefaultTableModel Aを考えると

JTable Bについてソートしたデータ。B.setAutoCreateRowSorter()trueです。Bはいくつかのクロームソート後にどのように更新されますか?A

私はドキュメントを読んでも、このに見てきた:

http://www.codejava.net/java-se/swing/6-techniques-for-sorting-jtable-you-should-know

と同様にTableRowSorter#addRowSorterListenerにビットを掘ったが、それは唯一の列がソートされたことを私に伝えることができ、本当に有用ではありません。もちろん、私はその列が多次元配列のすべての値をソートし、並べ替えてからテーブルをクリアしてからすべてを戻すのではない限り、私の場合は非常に遅く、実際にはオプションではありません。

RowSorterEventが提供する情報については、この参照してください:

https://docs.oracle.com/javase/7/docs/api/javax/swing/event/RowSorterEvent.html

誰かが正しい方向に私を指すことができますか?要求が行われた場合

答えて

4

は、私のコードは

だからのTableModelを検索しません...、のDefaultTableModelを取得し、各列と行の要素を探します。 table.getValueAt(...)メソッドを使用すると、テーブルの各行/列の要素を検索できます。データは、現在ソートされたテーブルの順序でアクセスされます。

ソートがDefaultTableModelを更新していないようだからです。

修正すると、ビュー(JTable)のみが更新されます。

TableModelを直接検索したい場合は、JTableメソッドを呼び出す(テーブル行を選択する)ときはいつでも、モデルインデックスをビューインデックスに変換する必要があります。これは、次のJTable方法を使用して行われます:

int columnColumn = table.convertColumnIndexToView(modelColumn); 
int row = table.convertRowIndexToView(modelRow); 

モデル値を視野に値を変換する方法もあります。

+0

正確に私が探していたものは、すべての問題を修正しました。 –

関連する問題