2

この質問がとても価値があることを願っていますが、試してみます...

かなり複雑な GUI を使用しており、全体的なパフォーマンスを少し向上させたいと考えています。多くのエントリ (最大 10000 行) が入力されているいくつかのコンボボックスを見つけました。すべてのスイング要素の作成は既に最適化されているため、通常は一度だけ初期化されます。しかし、たとえば、常にバックグラウンドで 10k のエントリを持つ 10 個のコンボボックス モデルを使用すると、メモリを大量に消費するように思えます。

検索機能を実装したので、ユーザーは「B」と入力すると、リストは「B」で始まる最初のエントリにジャンプします (さらに文字が追加された場合はさらに絞り込みます)。ただし、これはモデルを変更せず、選択したインデックスをリセットするだけなので、リストにはすべてのエントリが含まれたままになります。

私の質問は:

コンボボックス内で多数のエントリを処理する方法に関するベスト プラクティスはありますか? また、ユーザーの観点からすると、すべてのエントリを表示するか、キーが押された後に最初の 100 個とその他をオンデマンドで表示するかを選択します。

または、より具体的な質問をするには:

ユーザーが新しいキーを入力するたびに、大きなコンボボックスモデルをメモリに保持するか、小さなもの (〜 100 エントリ) を作成する方が良いですか?

入力と提案をありがとう!

4

4 に答える 4

4

たとえば、最初の 100 項目ともう 1 つの項目 "More..." または "Show All" を追加します。ユーザーが項目をクリックすると、10,000 件のレコードがすべて読み込まれます。または、ユーザーが入力を開始した場合、適切な範囲 (ただし、100 以下) を差し引いて、リストに表示します。

于 2012-08-16T09:10:24.127 に答える
3

JComboBox に 10000 エントリを表示することはできません。JTextFieldオートコンプリートで を使用できます。Swingx には、これを行うためのユーティリティAutoCompleteDecoratorが用意されています。

データをJXList (再び swingx から) に表示し、JTextField を使用してそのコンテンツをフィルタリングすることもできます。

JList は、すでに最適化されているコンポーネントです。表示されたデータ (スクロールペインのビューポートに表示される) のみが実際に描画されます。また、メモリの最適化のために、セルのレンダリングに flyweightパターンが使用されます。すべてのセルを描画するための ListCellRendeter は 1 つだけです。

何らかの理由で JComboBox を使用する必要がある場合。JCombobox は JList を使用して Popmenu にデータを表示するため、上記の利点が得られることに注意してください。

モデルのメモリを改善するには、データを遅延ロードすることを検討してください。ただし、オートコンプリート機能も必要なので、少し複雑です。オートコンプリートは、永続化されたデータを検索する必要があります。

于 2012-08-16T09:34:34.637 に答える
1

非常に多くのアイテムがあるため、ComoBoxは適していません。スマート検索のアイデアは優れていますが、CBを事前入力するのではなく、ユーザーが入力しているときにデータを非同期にロードして、少なくとも1文字または2文字を開始することで改善する必要があります。

于 2012-08-16T09:13:51.520 に答える
1

アプリケーションが使用している RAM の量は? 最初にロードするのに時間がかかりすぎますか?

デスクトップ/ノートブックのメモリは、最近は非常に安価です。アプリケーションが専用/プロフェッショナルなものである場合、つまりユーザーがフォアグラウンドで集中的に使用する場合、何よりもユーザーの速度と応答性を提供したいと考えています。インスタント メッセージング ツールのようなものであれば、その RAM フィンガープリントを低く抑えたいと思うでしょう。

私のアドバイスは、控えめな 2012 コンピューター ビルドで処理できる場合は、すべてをメモリに保持することです。

編集: ユーザビリティの観点から、StanislavL の提案は私にとっても魅力的です。

于 2012-08-16T09:10:38.113 に答える