比較述語を使用して並べ替えを行わずに、テーブル行を列で並べ替えるための JTable アイコンと動作を有効にするにはどうすればよいですか? つまり、テーブル ヘッダーに、使用されている列の昇順/降順の並べ替えの矢印を表示し、並べ替え順序/列の変更時に適切なメソッドを呼び出すようにするにはどうすればよいですか?
SQL クエリまたはビューに基づく (編集可能、フィルター可能、並べ替え可能) JTable を作成しようとしています。行がメモリに収まらない可能性があり、Java オブジェクトにきれいにマップされない可能性があるため、SQL 内ですべての並べ替え/フィルタリングを実行したいと考えています。列による並べ替え、値によるフィルタリング、および表示列に対応するようにクエリを変更するためのコードは既に記述しています。
TYPE_SCROLL_SENSITIVE,
これを使用するために、とを使用して ResultSet に基づいて JTableModel を作成する予定ですCONCUR_UPDATABLE
。これにより、DB への変更が ResultSet に反映されます。定期的に (1 秒間に数回) ResultSet から表示されている JTable を強制的に更新し、データベースへの変更がユーザーに表示されるようにします。テーブルに対するユーザーの変更は、検証後に更新可能な ResultSet に渡されます。
ソートが通常どのように行われるかを少し調べましたが、ほとんどの実装は、JTable が Comparator 述語を使用して javax.swing.RowSorter を作成するか、変更時にイベントを発生させるソートされた行のリストを維持することに依存しているようです。だから、私の質問:
ORM フレームワークは、データがエンティティ オブジェクトに適切にマッピングされないため、この質問に対する答えではありません。また、使用している DBMS は H2 です。
編集: Comparator の適用または行オブジェクトへの述語の並べ替えに基づく並べ替え可能な JTable ライブラリも、残念ながら不適切です。ソートを実行するためにすべてのオブジェクトをメモリに保持できるとは思いません。この問題により、SwingX JXTables、GlazedLists、または同様のライブラリを使用できません。できればいいのですが、できません。限目。
** 数千行、場合によっては数百万行、多数の列を処理します。はい、並べ替えとフィルタリングを行うには SQL を使用する必要があります。**
質問: (重要度の降順)
- 行の並べ替えに使用される列のインジケーターを表示するにはどうすればよいですか?
- ソート順を変更するために列ヘッダーを左クリックしたときに、JTable が適切なイベントを発生させるにはどうすればよいですか?
- データベースが変更されたときに JTable を強制的に更新する簡単な方法はありますか?
- このすべてをかなり簡単にするライブラリはありますか (DB クエリまたはビューと JTable を接続します)。
- このようなシステムを設計すると、恐ろしい、恐ろしい問題に遭遇するのでしょうか?