- - PR -
JTextFieldへのフォーカス?(j2sdk1.5.0_10+Firefox2.0+Red Hat Linux3.2.3)
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-02-01 03:32
まだリスナー系の仕込みと検証ができてませんが、取り急ぎご連絡します。
1)アプレット上にはJTextField以外にJComboBox,JCheckBox,JRadioButtonもあるのですが、操作不能になるコンポーネントはJTextFieldのみです。 2)JTextFieldに当たっていたフォーカスは消失しています。 ※JTextField#requestFocus,JTextField#grabFocusの違いがjavadocからはよく分からなかったのですが。。 | ||||||||||||||||||||
|
投稿日時: 2007-02-01 05:09
すみません、JTextFieldのフォーカスについてはまだ断定できていません。アプリケーションがJButtonクリック後にJTextFieldの入力チェックをするのですが、JButtonへのフォーカスが消失していることに関しては確認できています。 その他補足ですが、KeyboardFocusManager#getFocusOwner()から、オーナがsun.plugin.viewer.frame.XNetscapeEmbeddedFrameからjavax.swing.JButtonに移り変わっていることも確認できています。 | ||||||||||||||||||||
|
投稿日時: 2007-02-01 10:15
ダイアログが閉じられた後に、JTextFieldの親コンポーネント(私の場合だとJAppletのサブクラス)にフォーカス、またJTextFieldにフォーカスを戻すなど、いろいろ試してみたのですが、フォーカス自体は戻ってもJTextFieldにカーソルが出現しない状況は変わりませんでした。
また、JTextFieldにマウスとキーボードのリスナークラスを追加してみたところ、マウスのクリックなどのイベントは認識しているようですが、キーボード入力は認識していませんでした。
すみません、もう少し具体的に教えていただけますか?JOptionPaneにFocusListener、WindowListenerの実装クラスを追加するのかなと理解してしまったのですが、ひょっとしてダイアログの親コンポーネントに対して追加するということだったでしょうか? | ||||||||||||||||||||
|
投稿日時: 2007-02-01 20:58
暁さん
java.awt.Component#requestFocusInWindowのjavadocには、 このメソッドは boolean 型の値を返します。false が返された場合、要求は 確実にエラーになります。と記述されていて、実際にfalseが返されていて、「確実にエラーになる」のに、なぜ動作するんですかね。。 常にfalseが返されるのに、フォーカス遷移動作自体は、行われる同様の現象は、以前Windowsで経験して、なぜか分からないままにしましたが。
多分バグでしょうけど、根が深そうですね。
ということであれば、どこかに差があるのではないでしょうか。
は、FocusListenerでフォーカス消失時に、OpositeComponentで捕まえられないかなーと 思ってみました。 で、書いた後、気づいたんですが、わざわざ、JOptionPaneになど手を入れなくても、 Dialogとかを使用すれば、良いだけでしたね。混乱させてすみません。 どうもバグとしか思えないので、SunにBug reportでも書いてみてはどうでしょう。 ゴールがどこなのか分かりませんが、エラー表示に、Focus遷移が発生しないデザインに 変更した方が良いのでは。 | ||||||||||||||||||||
|
投稿日時: 2007-02-02 04:25
どうやら関連した内容が既に報告されているようです。 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4851685 JRE1.6.0でも再現できるということは、まだ治っていないということなのかもしれないですね。情報が散在しているので、もう少し調べてみます。 |