コンポーネントのサイズを変更した場合、私のアプリケーションでデータを取得します。ユーザーがサイズ変更操作を完了するまでフェッチを遅延させたいComponentListener
イベントcomponentResized
は、ウィンドウのサイズが変更されるたびに発生します。コンポーネントのサイズ変更が完了したときにインスタンスを見つける方法
答えて
私は、ある種のマッピングアプリケーションを適切に書いていると思いますか? :-)
スイングタイマークラスを使用して、イベントなしで指定された時間が経過するまで待つことができます。コードは次のとおりです。
/** Time to wait */
private final int DELAY = 1000;
/** Waiting timer */
private javax.swing.Timer waitingTimer;
/**
* Handle resize event.
*/
public void componentResized(ComponentEvent e)
{
if (this.waitingTimer==null)
{
/* Start waiting for DELAY to elapse. */
this.waitingTimer = new Timer(DELAY,this);
this.waitingTimer.start();
}
else
{
/* Event came too soon, swallow it by resetting the timer.. */
this.waitingTimer.restart();
}
}
/**
* Actual resize method
*/
public void applyResize()
{
//...
}
/**
* Handle waitingTimer event
*/
public void actionPerformed(ActionEvent ae)
{
/* Timer finished? */
if (ae.getSource()==this.waitingTimer)
{
/* Stop timer */
this.waitingTimer.stop();
this.waitingTimer = null;
/* Resize */
this.applyResize();
}
}
これはできません。しかし、SingleWorkerThreadを使用すると、処理されるイベントの数を最小限に抑えることができます。
これは従来の方法では不可能ですが、恐れ入ります。 componentResized()
は、すべての中間サイズ変更に対して呼び出され、現在の呼び出しが最後の呼び出しであるかどうかを判断する方法はありません。
厳密に言えば、あなたがしようとしていることは、従来のことではありません。データの読み込みは高価なIO操作であり、通常は、ボタンの押下などのより直接的なUI操作の後にユーザーが期待しているときに最もよく実行されます。コンポーネントのサイズは、フレームが最大化されたり、Windows 7の新しいAero操作などの別の場所での操作の結果として配置されるなど、無害な理由によって変更される可能性があります。do結果としてIOを実行します。サイジングのたとえば、Google Readerでは、ブラウザウィンドウ上でスクロールバーを動かした結果、RSSフィードから古い投稿を読み込むことができます。これは素晴らしい機能であり、明示的なロードボタンの必要性を排除しますが、古いポストを探しているユーザーが直接操作します。意識的な行動であり、意識的なものではない。
私の主張は、この作業をどのように行うか非常に注意する必要があると思います。遅いIO操作でユーザーを罰して、ウィンドウをサイズ変更したので単純に待機させるのはユーザーフレンドリーな方法ではありません。
あなたの質問には、UIがどのようなものか、コンポーネントがどのようなものか、どのようにリサイズされているか、データをロードしている場所など、貴重な情報はほとんどありません。ここにいくつかの提案があります:私は彼らが助けてくれることを願っています。
1.あらかじめメモリにデータをロードし、データモデルは、あなただけのメモリーにロードすることができ、あまりにも大きくない場合は、単にそれ
を表示し、すべてのサイズを変更するイベントに迅速にそれを再描画します。 Event-Dispatch-Threadは、リスナがリクエストによって圧倒されないように、resizeイベントを組み合わせます。これは初心者ではないかもしれませんが、言及する価値はあります。
2.あなたが最初のサイズ変更イベントに必要以上
ロードより多くのデータをロードするために熱心にして、その後、あなたが使用していないデータを拒否またはキャッシュのどちらか。テーブルやリストの行を埋める場合は、これがより良いアプローチかもしれません。表形式のデータは、通常、ロードして解析するのが簡単です。
3合理的な時間が
最初のサイズ変更イベントが1秒カウントダウンとタイマーを開始し停止するようにサイズ変更するための通過を許可します。その後のサイズ変更イベントは、1秒のカウントダウンをリセットします。ある時点で、最終的なサイズ変更イベントが発生します。その後、サイズ変更イベントがカウントダウンをリセットして期限切れになることはありません。この時点で、Timerが負荷をかけます。
私の意見では、3つは最も安全で最も正確なアプローチです。最初のサイズ変更イベントでデータがロードされていることを視覚的に示し、アプリケーションの感触を得るためにタイマーのカウントダウンを調整することで、アプリケーションの反応を感じさせることができます。
- 1. window.onresize:サイズ変更中に関数を実行すると、サイズ変更が完了したとき
- 2. MFCビューのサイズ変更を知る方法を完了しました
- 3. イメージソースの更新が完了したときに強制的にサイズを変更する
- 4. Git:ルートから完了したコミットを見つけるには?
- 5. Angular2コンポーネント親のサイズ変更が変更されたときにリッスンします
- 6. タスクが完了したときのTextBox値の変更
- 7. アクティビティが完了したときの通知を避ける方法
- 8. バルク挿入が完了したら「完了」メッセージを受け取る方法は?
- 9. RxAndroid:個々の操作が完了したときだけでなく、完了したときにわかる
- 10. pg_restoreが完了したときにプログラムで知る方法
- 11. 1つのアイテムがサイズを変更したことをListコンポーネントに通知する方法?
- 12. Observableが完了したときに値を返す方法は?
- 13. フォーム変更イベントが完了したときの検出方法(ファイルをbase64に変換)
- 14. WebViewレンダリングが完了したときを知る方法
- 15. バックボーンmodel.fetch()が完了したときを知る方法?
- 16. CThreadPoolで作業が完了したときを知る方法?
- 17. MongoDB、forEach&Promise:forEachループが完了したときを知る方法?
- 18. StrongLoopループバック - エラー:「完了」モジュールを見つけることができません
- 19. サイズ変更可能なテキストエリアの単語ラップポイントを見つける方法
- 20. UICollectionView collectionView:cellForItemAtIndexPathが完了した後、セルのサブビューのサイズが変更されます
- 21. フッターを底につけてサイズを変更する方法は?
- 22. UIWebView(準備完了状態4)の最後のロードを見つける方法
- 23. キャンバスのサイズ変更時に瞬きを避ける方法
- 24. ユーザーが変更を完了したときにJqueryの入力フィールド
- 25. ドキュメントが準備完了でドキュメントのサイズが変更されたときにイベントを呼び出す
- 26. scrapyクローラが完了したときに変数を更新します
- 27. UITableViewのリロードが完了したときの通知方法
- 28. Android:固定サイズのときにSurfaceViewのタッチ位置を見つける方法?
- 29. 1つのコンポーネントが変更されたときにuipickerの複数コンポーネントを読み取る方法
- 30. Angular Jsでサイズ変更が完了したときにのみResizeメソッドを呼び出します。サイズ変更可能
詳細な例を書くのに感謝します。この解決策は私の要求に合っているようです。 –