1

テーブルがどのように機能するか、具体的には Swing アプリケーションを理解しようとしています。データベースからデータを取得し、JTable にデータを表示するテーブルがあります。コードを調べて、データベースからデータを読み取る方法を理解しました。

私が苦労しているように見えることの1つは、データがテーブルにどのように表示され、どのように更新されるかです。テーブルにデータを表示する方法は知っていますが、このテーブルとの違いは、データが動的に更新されることです。つまり、データベースから取得したすべてのデータがテーブルに表示されるわけではありません。

アプリケーションが多数の行を表示しているように見え、ユーザーがマウスをスクロールするか、スクロールバーをテーブルの下/端に移動すると、アプリケーションは自動的にテーブルを更新し、より多くのデータを表示します (わずかな遅延があることがわかります)そのとき)。

上記がどのように実装されているかを理解するには、この手法に関する詳細情報が必要です。つまり、この種の手法とは何か、使用される通常のインターフェイス/クラスは何かなどです。

上記がどのように達成されるかの例へのリンクは、最初に簡略化されたバージョンを確認する必要があるため、非常に役立ちます。

何か案が?

ありがとう

4

3 に答える 3

3

この手法の名前はわかりませんが、最近のモバイルの世界ではかなり一般的であることは知っています (たとえば、Twitter や Facebook のアプリで使用されています)。実際には、実装はおそらく、いくつかのコンポーネントが変更された通常の JTable になります。

  1. データを表示する独自のコードを作成するTableModelと (これは非常に簡単です)、どこからでも情報を取得し、必要に応じてデータを追加/削除できます。こちらのドキュメントを参照してください。実装する必要があるメソッドはほんの一握りです

    。ここで重要なのはgetRowCount()、テーブルにデータを追加/削除するときに変更するメソッドと、getValueAt()テーブルに表示するデータを取得するメソッドです。

    TableModelはおそらく配列のようなオブジェクトがあります (ArrayList) には、テーブルに表示する必要があるデータが含まれています。テーブルにデータを追加/削除する場合 (つまり、「更新」)、この配列リスト オブジェクトに行を追加/削除してから、テーブルの更新をトリガーして変更を取得します。 または、データベースを操作している場合は、テーブルに値を表示するたびに呼び出されるで

    データベースをCursor開くことができます。TableModelgetValueAt()

  2. などの GUI コンポーネントの 1 つを上書きするか、スクロールバーに をJScrollBar追加しListenerて、テーブルの最後を超えてスクロールしようとしたことを検出して更新をトリガーする必要があります。

  3. 視覚的には、テーブルの最後までスクロールしたときに何か特別なものを表示したい場合 ("Refreshing" という単語を表示するなど)、現在のルック アンド フィールのペイント コンポーネントの一部を上書きする必要があります。JScrollBarまた、「高さ」にいくつかの目盛りを追加したい場合は、スクロールバーを実際に「更新」部分に移動できるように、を上書きする必要があります(表示のみ - 上記のリスナーは、実際のリフレッシュ作業)

于 2012-10-23T12:20:20.613 に答える
2
于 2012-10-23T13:08:25.337 に答える
2

この種の手法は、遅延読み込みとして知られています。JTableを怠惰にするためのさまざまなアプローチがあります。

レイジーテーブルの実装は、テーブルのさまざまなロード状態に直面するため、見た目ほど簡単ではありません。遅延読み込みテーブルを実装するための私の好みの方法(そしてWATTO Studiosによって記述されたものとは少し異なります)は、遅延読み込みリストをテーブルモデルとして使用/作成し、プロキシオブジェクトを使用して新しいデータの読み込みをトリガーすることです。したがって、テーブルを初期化するときにデータ全体をロードする代わりに、プロキシオブジェクト(元のIDのみが挿入されるのに対して空のデータオブジェクト)でテーブルを埋めるだけです。プロキシオブジェクトが値を要求されるたびに(たとえば、行が表示されたときにのみ発生するレンダラーから)、サービスから元のデータオブジェクトをフェッチし、次の50個のオブジェクトもロードします。サーバーにすべての行を要求することは避け、プロキシオブジェクトを新しいデータに置き換えます。

一見すると、これはちょっと単純に見えますが、データによっては非常に厄介になる可能性があります。たとえば、データが自己参照の外部キーなどを使用している場合です。さらに、必要なときにデータをロードするだけでパフォーマンスを向上させるのではなく、必要なときにデータをロードするだけなので、テーブルは少し遅く感じることがよくあります。したがって、パフォーマンスとスムーズなスクロール動作のバランスをとることは、データのフィルタリングと並べ替えだけでなく、ここでの課題です。

キーワードlazyloadingを使用すると、このトピックに関するいくつかの例が見つかります。

于 2012-10-23T13:04:47.067 に答える