• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JOptionPane.showOptionDialogの不都合)

JOptionPane.showOptionDialogの不都合

このQ&Aのポイント
  • JDeveloperで作成しているツールにおいて、TextFieldオブジェクトからfocusLostした時に延々とダイアログが出続ける現象が発生してしまいます。
  • 調べて見た所、isFocusTraversableメソッドをオーバーライドしてfalseを返すようにすれば解決する可能性がありますが、JAVAが初めてで分からないため、具体的な実装方法がわかりません。
  • 上手く反映させるためには、MsgBoxクラス内でisFocusTraversableメソッドをオーバーライドし、falseを返すようにする必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • ct27
  • ベストアンサー率62% (48/77)
回答No.1

focusLostのイベントはshowOpenDialogで出たダイアログを閉じた瞬間にも発生しています。 そのためダイアログ表示の無限Loopに陥ってしまいます。 これを回避するためにはFocusEventクラスにあるisTemporaryというメソッドを使用します。 このメソッドはフォーカス変更イベントがテンポラリであるか、パーマネントであるかを示します。 (詳しくはSUNが提供しているAPIをご参照下さい) 【例】 jTextField1.addActionListener(new java.awt.event.ActionListener() {   public void focusLost(FocusEvent e) {     if ( e.isTemporary() ){       return;     }     //ダイアログ呼び出し   } });  これで解決できるのではないでしょうか?  自信がありませんのでお試しくださいませ。

Naocky
質問者

お礼

無事に確認出来ました! わざわざオーバーライドしなくても こんな簡単な方法で可能だったのですね。 本当に助かりました。 どうも有難う御座います。

関連するQ&A