海外旅行から帰ってきたら、まず何を食べる?

初めて投稿します。
よろしくお願いします。

現在、JDeveloperで作成しているツールがあり、
そこに幾つか入力項目を設けました。
ユーザーがそこに入力し、focusLostした時に
入力された内容が項目にそぐわない場合は
エラーメッセージのダイアログを出したいのです。

JOptionPaneクラスのshowOpenDialogメソッドで
表示まで持ち込めたのですが、これを
TextFieldオブジェクトからfocusLostした時に
発生させると、延々とダイアログが出続ける現象が
発生してしまいました(Buttonオブジェクトなら大丈夫)

調べて見た所、isFocusTraversableと言う
親クラスにあるメソッドでfalseを返すようにすれば
良いと書いてあったのですが、実は私、JAVAが
初めてで良く分かりません。

とりあえず以下のように書いてみたのですが…。

---
public class MsgBox extends JOptionPane {

public MsgBox() {
    [ダイアログを出すメソッド]
 }

//フォーカス制御のオーバーライド
public boolean isFocusTraversable() {
  return false;
}
---

これでは反映されません
(分かる方は当然と思うでしょうが)
どのように書けば上手く反映されるのでしょうか?
どなたか教えてくださるととても助かります。

A 回答 (1件)

focusLostのイベントはshowOpenDialogで出たダイアログを閉じた瞬間にも発生しています。


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

  }
});

 これで解決できるのではないでしょうか?
 自信がありませんのでお試しくださいませ。
    • good
    • 0
この回答へのお礼

無事に確認出来ました!
わざわざオーバーライドしなくても
こんな簡単な方法で可能だったのですね。

本当に助かりました。
どうも有難う御座います。

お礼日時:2000/12/22 13:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!