- PR -

JFrame間の画面遷移とアクティブWindowについて

1
投稿者投稿内容
のち
会議室デビュー日: 2004/04/20
投稿数: 2
投稿日時: 2004-04-20 02:25
現在、JFrameを継承する2種類の画面を作成しています。
先に表示した画面が閉じたら、
次の画面を表示する処理を行っているのですが、
後に表示した画面がアクティブにならない
(java.awt.Window.isActive()がfalseの状態)という現象が発生しています。

具体的な処理はこのようになります。
まず画面制御を行うクラスAから、先に表示する画面1を生成し表示します。
この時、画面1でWindowClosedイベントが発生した場合、
クラスAに対して通知するよう、リスナー登録をしておきます。
クラスAでは画面1からWindowClosedイベントが発生したことを通知されると、
次に表示する画面2を生成し、表示しています。
ここで、画面2にisActive()を実行すると、falseが返っています。

画面2を生成し表示(setVisible(true))した時点で、
アクティブになるものと思っていたのですが、
何か思い違いがあるのでしょうか?ご教授をお願いいたします。



Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-04-20 07:10
のちさん、こんにちは。

画面2に対する setVisible(true)から、実際に画面2の ウインドウが表示
されるまで時間があります。(人間の目では一瞬ですが。)

画面2にも WindowListener登録して、通知をうけて同期させてはいかがで
しょうか?

可視を待つには、windowOpened()、
アクティブを待つには windowActivated()の通知を受けます。
のち
会議室デビュー日: 2004/04/20
投稿数: 2
投稿日時: 2004-04-20 23:04
Kissingerさん、ご回答ありがとうございます。
なるほど、言われてみればその通りでした(^^;

ご指摘いただいた内容をもとに、画面2でwindowActivated()が発生した際、
クラスAに対して通知するよう追加しました。
クラスAはその通知を受けて、画面2に対して処理を行うよう変更したところ、
期待通りの挙動となりました。
(クラスAが画面2に対して処理を行うタイミングに
画面2がisActive()==trueとなっていました。)

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)