- PR -

JTextFieldへのフォーカス?(j2sdk1.5.0_10+Firefox2.0+Red Hat Linux3.2.3)

投稿者投稿内容
未記入
会議室デビュー日: 2007/01/26
投稿数: 18
投稿日時: 2007-01-26 02:36
こんにちは。

JTextFieldを複数持っているアプレットがあるのですが、空入力の場合、JOptionPaneでダイアログを表示し、ダイアログを閉じた後、JTextFieldへのキーボード入力、あるいはマウスでの選択などができなくなってしまいます。

ブラウザのバグのような気がしているのですが、プログラム的に解消できる方法はないでしょうか?環境は件名のとおりです。

JTextField#requestFocus()、JTextField#grabFocus()、JTextField#setFocusable()を使用してみたのですが、相変わらず入力をうけつけませんでした。

どうぞよろしくお願いします。

まさ
ベテラン
会議室デビュー日: 2002/11/15
投稿数: 74
投稿日時: 2007-01-26 12:42
まさです。

アプレットだよね。
ブラウザのバグというより JRE のバグだったような。。。

多分、アプレットにフォーカスがない状態になっているような気がするので、
ダイアログが閉じたときにアプレットがフォーカスを受け取れるようなことを
試してみてください。
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2007-01-26 23:03
引用:

ブラウザのバグのような気がしているのですが、プログラム的に解消できる方法はないでしょうか?環境は件名のとおりです。


問題の切り分けはできているのでしょうか?
でなければ、ブラウザのバグかコード自体に問題があるかどうかは判断できないのでは?
切り分けができているならば、その情報も記述した方が良いでしょう。



未記入
会議室デビュー日: 2007/01/26
投稿数: 18
投稿日時: 2007-01-27 02:42
はい、アプレットでのことです。

追加の情報ですが、Windows XP Professionalでは同様のことが再現できませんでした。また、JREを1.6にした場合も、やはりOSがRed Hat Linuxの場合のみ再現できます。再現できたブラウザはFirefox, SeaMonkeyです。

ブラウザのバグかなと思っている理由ですが、以下の情報からです。ただ、ブラウザとJRE Plug-Inのバージョンが古いですが。。
https://bugzilla.mozilla.org/show_bug.cgi?id=233210

未記入
会議室デビュー日: 2007/01/26
投稿数: 18
投稿日時: 2007-01-27 03:09
引用:
ダイアログが閉じたときにアプレットがフォーカスを受け取れるようなこと



ダイアログを出すのにJOptionPane#showMessageDialogを使用しているのですが、閉じられた時のイベントをアプレットでキャッチするにはどうしたら良いのでしょうか?javadocを見たのですが、ダイアログが閉じられた場合のイベントをアプレットに通知するやり方が分かりません。
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2007-01-27 10:12
どちらの現象が発生しているのでしょう?
1)ダイアログを閉じた後アプレット上のコンポーネント操作不能
2)ダイアログを閉じた後、ダイアログ表示前にフォーカスの当たっていたコンポーネントからフォーカス消失

(1)だと思っていたのですが、以下の書き込みをみると(2)だったのでしょうか?
引用:
未記入さんの書き込み (2007-01-27 02:42) より:
ブラウザのバグかなと思っている理由ですが、以下の情報からです。ただ、ブラウザとJRE Plug-Inのバージョンが古いですが。。
https://bugzilla.mozilla.org/show_bug.cgi?id=233210


XPproでの確認で、確かにFireFox(1.5および2.0)で(2)は発生しました。
これは(statusがunconfirmedなのが気になるものの)バグ情報にも一致します。
でも未記入さん(スレ主さんのほう)ではXPproで再現しなかったということはやはり(1)なのでしょうか?

なおJOptionPane#showMessageDialogはスレッドをブロックしますので通知は不要です。
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2007-01-28 23:41
>Windows XP Professionalでは同様のことが再現できませんでした。
とのことですが、
Windows XP Professional で実行してみたところ、
IE6ではJOptionPaneのダイアログを閉じた後、Appletにフォーカスが戻りますが、
FireFox2ではApplet自体からフォーカスがなくなりますね。

>閉じられた時のイベントをアプレットでキャッチするにはどうしたら良いのでしょうか
JOptionPane内で、Dialogを生成している箇所が、かなり手の入れにくい所に、
確かあったと記憶しています。そこでFocusListener,WindowListenerあたりを仕込めば
もしかしたら制御できるかもしれません。

VM外部に渡ってしまったフォーカスを、JavaでAppletに設定することは多分できないと思います。(javascriptとか使えば可能かもしれません。)

まずは、JOptionPaneに手を入れてみてはどうでしょう?
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2007-02-01 00:57
Linux(Fedora6 2.6.18)上のFireFox1.5で試していて、まったく受け付けなくなる可能性を見つけました。
それは、ポップアップが上がったままタスク切り替えをすることです。
(……そんなはずないですよね。やっぱり。)
これはLinux版FireFoxでは、JAVAアプレットから上がったポップアップ画面を
ブラウザとは別のタスクとして処理しているために起こりえます。
Windows版FireFoxでは、ポップアップが表示されてもブラウザのタスクとして処理されているのか、この状況にならないです。

フォーカスが失われる件は、JOptionPaneの親を明示的に指定してやると回避できました。
アプレットのすぐ上に表示されるのが少し嫌ですが。

以下直接は関係ない情報です。発生するのはlinux環境(Fedora)です。
検証用に作成したサンプルではフォーカス取得にrequestFocusInWindowを使用したのですが、常にfalseが戻されるという現象にあいました。
しかし動作的には問題なく、フォーカスは期待した通りに当たります。
アプレットでのみ起こるならまだしもSwingでも同じ結果なので正直困惑しています。
カーネルやgtkにバージョンによって何か不具合があるのかも知れません。

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