私は、400ミリ秒間画像を表示するためにJava Swing Timerを使用する簡単なプログラムを持っています。この時間には、すべてのActionListenersを停止するか、ActionEventの取得を停止したいだけです。私は40以上のボタンがあり、これを行う簡単な方法が欲しい。一定期間JavaのすべてのActionEvents/Stop Listeningの受信を停止しますか?
Javaでこれを行うにはどうしますか?
私は、400ミリ秒間画像を表示するためにJava Swing Timerを使用する簡単なプログラムを持っています。この時間には、すべてのActionListenersを停止するか、ActionEventの取得を停止したいだけです。私は40以上のボタンがあり、これを行う簡単な方法が欲しい。一定期間JavaのすべてのActionEvents/Stop Listeningの受信を停止しますか?
Javaでこれを行うにはどうしますか?
この「画像表示済み」状態にあると判断できますか?イメージが上になり、状態を「イメージ表示」などに設定します。あなたのウィジェットを通って、画像がアップしている間にどれが死んでいるのかを決めます。それらをこの状態値のオブザーバにします。状態が変わると、必要に応じて有効または無効になります。画像コードはどのウィジェットにも直接何もしません。状態が「画像表示」になったと宣言します。その情報をどうすれば何をすべきかを決定するのはオブザーバーの責任です。
またはGlassPaneを使用してください。それも動作します。もちろん、GlassPaneはすべてをシャットダウンします。より選択的にする必要がある場合は、より微調整されたアプローチが必要です。
一時的なGlassPane
インスタンスを使用すると、空のリスナーを登録してすべてのイベントを消費することができます。
装飾されていないモーダルJDialogを使用してイメージを表示します。ダイアログを表示する前に、タイマーを開始します。タイマーが400ミリ秒で起動すると、ダイアログが閉じます。
私はよく似た問題を抱えていて、そのような状況で私をつかまえた設計上の問題点を発見しました。その場合、私はまだそれを回避しなければならなかった。問題を解決するために、無効にしたい(リッスンを止めたい)要素のリストを保存し、タイマーの始めと終わりにそれらの要素を繰り返しました。ボタンの場合は、次のように簡単にする必要があります。
ボタンの場合、ボタンがグレー表示になります。他のスイングコンポーネントにも同様のことが起こります。
このソリューションはお勧めできません。 – mre
おそらくOPと自分にとってなぜ有益なのかについての説明があります。しかし、私はSteve Jの提案も似ていますが、これは同様の反復的なアプローチです。 –