1

JScrollPanesome を使用して 1000 個のコンポーネントを含む が与えられLayoutManagerます。各コンポーネントは、ロードされた状態またはアンロードれた状態のいずれかになります。すべてをロードするのに十分なリソースがありません。

load()目に見えるコンポーネントのみをメモリ内で編集し、目に見えないコンポーネントを編集したいと思いますunload()。ユーザーがスクロールするとき、リスナーはコンポーネントの状態を更新し続ける必要があります。unload()以前に表示されていたものとload()新しく表示されたものです。

  1. いつでも、どのコンポーネントが表示されているかをどのように知ることができますか?
  2. 1000全体を反復せずにこれを知ることができますか? (効率的な のようにviewPort.getVisibleComponents())

すべてのコンポーネント Y のソートされたリストを準備し、実行時のバイナリ検索でViewPortの Y をインデックスに到達させて、目に見えるものに導く可能性があります。これは、リストの準備中にコンポーネント Y がすべて 0 を返したため、失敗しました。これは効率的である必要があります。

4

1 に答える 1

1

具体的に言うと、1000 のレコードがあり、それぞれが のインスタンスで表されると仮定しますclass Record。そのようなそれぞれRecordには、一意で意味keyのある typeが含まれている必要がありますKey

  • List<Key>おそらくバックグラウンド タスクで を取得します。

  • 値の 1 列TableModelを作成しkeyます。

  • JTableこのモデルを使用して、を構築しtableます。

  • 適切なレイアウトの左側にを追加しtableます。JScrollPane

  • 右側にDisplay、選択した単一の の詳細を表示できるパネルを追加しRecordます。

  • で現在選択されているものの詳細を更新する、ここに表示さDisplayれている を含めます。ListSelectionListenerRecordtable

  • Record選択したそれぞれをキャッシュに追加し、キャッシュにRecordまだ存在しない場合にのみ、おそらくバックグラウンド タスクでストレージから取得します。

于 2012-11-23T02:42:47.627 に答える