-PR-
解決済み

JOptionPane.showOptionDialogの不都合

  • すぐに回答を!
  • 質問No.21219
  • 閲覧数343
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 50% (3/6)

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

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

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

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

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

---
public class MsgBox extends JOptionPane {

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

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

これでは反映されません
(分かる方は当然と思うでしょうが)
どのように書けば上手く反映されるのでしょうか?
どなたか教えてくださるととても助かります。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル9

ベストアンサー率 62% (48/77)

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

  }
});

 これで解決できるのではないでしょうか?
 自信がありませんのでお試しくださいませ。
お礼コメント
Naocky

お礼率 50% (3/6)

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

本当に助かりました。
どうも有難う御座います。
投稿日時 - 2000-12-22 13:11:07
-PR-
-PR-
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ