2017-06-05 13 views
1

私はJTableに表示され、データベースに格納されている「人」のリストを持っています。検索エリアに入力するときに、そのテーブルで絞り込まれた結果をユーザに提供したいと思っています。Document Listenerを使用してリアルタイムで検索結果を表示しますか?

したがって、たとえば「S」を入力するとすぐに「蘇」

を入力すると、ちょうど「スーザン」に絞られることになる表示名に「スーザン」、「スティーブン」、「スティーブ」を狭めることになります

DocumentListenerメソッド.removeUpdate(e).insertUpdate(e)を使って、基になるデータベースを検索してテーブルビューを更新するメソッドを呼び出すことを考えていましたが、これはかなり無駄に思えます。

実際、私は新しいデータベース接続と他のdbオブジェクトを作成し、文字が入力されるたびにテーブルをリフレッシュします。私はこれがちょうど貧しいデザインか、積極的に私の問題を引き起こすかどうかは分かりません。これに接近するより良い方法はありますか?私は通常の検索ボタンに固執すべきですか?

+0

[例えば(https://stackoverflow.com/questions/26031383/how-to-filter-jtable-with-respect-to-a-specific-column/26031896#26031896)および[例](HTTPS ://stackoverflow.com/questions/29500713/overlay-swing-text-label-as-text-is-entered/29506154#29506154) – MadProgrammer

+0

ありがとう、間違いなくそれらもよく読むでしょう – NickW

答えて

2

私は、JTableの

に表示「人」のリストをしました表の行。

詳細と動作例については、Sorting and FilteringのSwingチュートリアルのセクションをお読みください。

+0

ああ、もちろん - 私はデータベースに問い合わせる必要はありません。あなたに感謝します。 – NickW

+0

@NickW、チェックマークをクリックして回答を「受け入れる」ことを忘れないでください。人々は問題が解決されたことを知ります。 – camickr

+0

done - ああ、私はチュートリアルが痛みの世界に私のプログラムを開くつもりであると感じています。どのように選択された行... XDに基づいてコンテンツを削除するのですか?おかげで – NickW

2

この決定は、アプリケーションとユーザーの要件によって異なります。あなたに似たオートコンプリート機能を提供する多くのアプリケーションがあります。

最適化を行わずに開始し、パフォーマンスの仕組みを確認してください。次に、さまざまな最適化手順を試すことができます。

1)入力したユーザーと検索要求の間に待機時間を追加します。たとえば、ユーザーが「S」以外の特定のテキストを検索する可能性が高いことを知っている場合は、2〜2文字以内に数文字を入力するまで待ちます。

2)異なるスレッドで検索を実行し、そこからテーブルを更新します。ユーザーのタイプとして次の検索を行うときに、以前の検索スレッドをキャンセルすることができます。

3)ユーザーが入力している間にDB接続を開いたままにし、一定の時間(たとえば5秒)後に閉じます。しかし、あまりにも長い。すべての人々が、あなたはのサブセットを表示するには、JTableののfiltering機能を使用することができますJTableの中に表示されている場合

+0

おそらく上記と一緒に行くが、ありがとうもちろん、回答は – NickW

関連する問題