- PR -

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

投稿者投稿内容
未記入
会議室デビュー日: 2007/01/26
投稿数: 18
投稿日時: 2007-02-01 03:32
まだリスナー系の仕込みと検証ができてませんが、取り急ぎご連絡します。

引用:

どちらの現象が発生しているのでしょう?
1)ダイアログを閉じた後アプレット上のコンポーネント操作不能
2)ダイアログを閉じた後、ダイアログ表示前にフォーカスの当たっていたコンポーネントからフォーカス消失



1)アプレット上にはJTextField以外にJComboBox,JCheckBox,JRadioButtonもあるのですが、操作不能になるコンポーネントはJTextFieldのみです。

2)JTextFieldに当たっていたフォーカスは消失しています。

※JTextField#requestFocus,JTextField#grabFocusの違いがjavadocからはよく分からなかったのですが。。


未記入
会議室デビュー日: 2007/01/26
投稿数: 18
投稿日時: 2007-02-01 05:09
引用:
2)JTextFieldに当たっていたフォーカスは消失しています。



すみません、JTextFieldのフォーカスについてはまだ断定できていません。アプリケーションがJButtonクリック後にJTextFieldの入力チェックをするのですが、JButtonへのフォーカスが消失していることに関しては確認できています。

その他補足ですが、KeyboardFocusManager#getFocusOwner()から、オーナがsun.plugin.viewer.frame.XNetscapeEmbeddedFrameからjavax.swing.JButtonに移り変わっていることも確認できています。
未記入
会議室デビュー日: 2007/01/26
投稿数: 18
投稿日時: 2007-02-01 10:15
ダイアログが閉じられた後に、JTextFieldの親コンポーネント(私の場合だとJAppletのサブクラス)にフォーカス、またJTextFieldにフォーカスを戻すなど、いろいろ試してみたのですが、フォーカス自体は戻ってもJTextFieldにカーソルが出現しない状況は変わりませんでした。

また、JTextFieldにマウスとキーボードのリスナークラスを追加してみたところ、マウスのクリックなどのイベントは認識しているようですが、キーボード入力は認識していませんでした。

引用:
FocusListener,WindowListenerあたりを仕込めば


すみません、もう少し具体的に教えていただけますか?JOptionPaneにFocusListener、WindowListenerの実装クラスを追加するのかなと理解してしまったのですが、ひょっとしてダイアログの親コンポーネントに対して追加するということだったでしょうか?
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2007-02-01 20:58
暁さん
引用:

Linux(Fedora6 2.6.18)上のFireFox1.5で試していて、まったく受け付けなくなる可能性を見つけました。
それは、ポップアップが上がったままタスク切り替えをすることです。
(……そんなはずないですよね。やっぱり。)
これはLinux版FireFoxでは、JAVAアプレットから上がったポップアップ画面を
ブラウザとは別のタスクとして処理しているために起こりえます。


引用:

しかし動作的には問題なく、フォーカスは期待した通りに当たります。


java.awt.Component#requestFocusInWindowのjavadocには、
このメソッドは boolean 型の値を返します。false が返された場合、要求は 確実にエラーになります。と記述されていて、実際にfalseが返されていて、「確実にエラーになる」のに、なぜ動作するんですかね。。
常にfalseが返されるのに、フォーカス遷移動作自体は、行われる同様の現象は、以前Windowsで経験して、なぜか分からないままにしましたが。

引用:

アプレットでのみ起こるならまだしもSwingでも同じ結果なので正直困惑しています。
カーネルやgtkにバージョンによって何か不具合があるのかも知れません。


多分バグでしょうけど、根が深そうですね。

引用:

1)アプレット上にはJTextField以外にJComboBox,JCheckBox,JRadioButtonもあるのですが、操作不能になるコンポーネントはJTextFieldのみです。


ということであれば、どこかに差があるのではないでしょうか。

引用:

FocusListener,WindowListenerあたりを仕込めば


は、FocusListenerでフォーカス消失時に、OpositeComponentで捕まえられないかなーと
思ってみました。

で、書いた後、気づいたんですが、わざわざ、JOptionPaneになど手を入れなくても、
Dialogとかを使用すれば、良いだけでしたね。混乱させてすみません。

どうもバグとしか思えないので、SunにBug reportでも書いてみてはどうでしょう。

ゴールがどこなのか分かりませんが、エラー表示に、Focus遷移が発生しないデザインに
変更した方が良いのでは。
未記入
会議室デビュー日: 2007/01/26
投稿数: 18
投稿日時: 2007-02-02 04:25
引用:
どうもバグとしか思えないので、SunにBug reportでも書いてみてはどうでしょう。



どうやら関連した内容が既に報告されているようです。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4851685

JRE1.6.0でも再現できるということは、まだ治っていないということなのかもしれないですね。情報が散在しているので、もう少し調べてみます。

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