• ベストアンサー

ロストフォーカスイベントとその他のイベントの関係

ロストフォーカスイベント時のその他のイベント(ボタンイベント)の中止方法 フィールドのロストフォーカスイベントで3文字以上入力していた場合に エラーメッセージを表示する。 フィールドに4文字値を入力して、フォーカスをフィールドにあてたまま ボタンを押下するとロストフォーカスイベントが走り、 同時にボタンイベントも発動してしまいます。 ロストフォーカスイベント時にエラーが発生している場合は、 ボタン押下処理を中止するようにしたいのですが、可能でしょうか? 検証は、Java1.6で行っています。

  • Java
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • teketon
  • ベストアンサー率65% (141/215)
回答No.3

JButtonにあるsetActionCommandを使用して、何が実行されたかコマンドを決める方法です。 イベントが発生した時、ActionEventオブジェクトからgetActionCommandを使用しコマンドを取得すれば、 どのボタンが押されたのか、唯のロストフォーカスなのか判断できるかなと。 ただ、この方法はメニューから実行、右クリックのコンテキストメニューから実行、ボタンから実行等をすべて同じ処理にしたい場合に使用する方法なので、イベントが違うとうまくいくかどうかちょっと検証が必要です。

batake1012
質問者

お礼

ご回答ありがとうございました。 まだ、解決しておりませんが・・・。お礼までに。

batake1012
質問者

補足

teketonさん 回答ありがとうございます。 ロストフォーカス、ボタン押下のイベント処理で共通処理が呼ばれている場合、 共通処理にて、ロストフォーカスイベントがボタン押下のイベントかを判断する方法と 理解しました。 ロストフォーカス時にエラーとなり、メッセージダイアログがでた時点で、ボタンの イベントは中止(または、キャンセル)されることが望ましいと思っています。 上記の前提条件の場合は、どのようにするべきでしょうか? java1.4の時は、 ロストフォーカス時にエラーとなり、メッセージダイアログがでた時点で、ボタンの イベントは中止(または、キャンセル)されていたのですがね・・・。 なんで、Java1.6になったら、できなくなったのか・・・。 愚痴です。

その他の回答 (2)

  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

同じ人ですが、他にはActionCommandを設定する、とか。 lost focusのイベントハンドラでボタンのアクションコマンドが設定されていれば、lost focusイベントをpassさせる。 例によって試したことはありません。

batake1012
質問者

お礼

ご回答ありがとうございました。 まだ、解決しておりませんが・・・。お礼までに。

batake1012
質問者

補足

teketonさん、2回も回答ありがとう御座います。 teketonさんのアドバイスを検討してみましたが、よくわかりませんでした。 よろしければ、もう少し詳細に教えて頂けませんか? 以上、宜しくお願い致します。

  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

Swing?だったら、InputVerifierを使うと良さそう。 ただ、エラーメッセージの表示がダイアログのような、フォーカスを移す場合だとどうなるかは不明。

参考URL:
http://docs.oracle.com/javase/jp/1.3/api/javax/swing/InputVerifier.html
batake1012
質問者

お礼

捕捉です。 他の方で inputVerifier以外の方法をご存知の方がございましたら ご教授ください。

batake1012
質問者

補足

回答ありがとうございます。 Swingです。 そうですね、忘れていましたがnputVerifierであれば可能っぽいですね。

関連するQ&A

  • JSFでロストフォーカスイベント

    JBOSS SEAMで開発をしており、JSFにてテキストボックスに入力し、フォーカスが外れた時に、その下にあるテキストボックスに上で入力された値の消費税額を表示したいのですが、ロストフォーカスイベントの設定方法がわかりません。方法はないでしょうか?

  • イベントのキャンセル

    VS2005standardのVB.NETで開発しています。 質問: テキストフィールドからフォーカスアウトした瞬間に形式チェックロジックを走らせていますが、画面の右下に設置した「キャンセルボタン」を押下するタイミングでフォーカスアウトしたら、イベントをキャンセルしたい 要するにキャンセルして画面を閉じたいのに、フィールドの入力形式がが違うとエラーが出るので、うっとうしいのです。 こういう場合の簡単な対応方法ってありますか? お教えください。

  • VB6のロストフォーカス時の処理をキャンセルしたい。

    textbox1 textbox2 textbox3 があったとします。 textbox1には ロストフォーカス時にエラー処理が入っています。 登録、終了ボタンがあり、登録ではエラーではじいていいのですが、 終了ボタンの場合、エラー処理を回避(キャンセル)する方法はないでしょうか? こんな感じで 終了.click textbox1.lostfocus の処理をキャンセル end

  • フォーカスの移動

    IMEソフトキーボードのようなものを作っています。 フォーム1にテキストボックスがあり、フォーム2をソフトキーボード。というように作りたいと思っているのですが問題があります。 コマンドボタンを押すごとに1文字ずつ送るような作りになっているのですが、1文字ごとにテキストボックスからコマンドボタンにフォーカスが移るため、2文字以上の文字列の変換ができないのです。VB的に無理なのかもしれないですが、IMEソフトキーボードのようにテキストボックスにフォーカスをセットしたままの文字入力を出来ないでしょうか?ちなみにkeybd_eventを使っています。 時間がありましたら、ご教授のほどよろしくお願いします。

  • ホームページ内でEnterキー押下時にフォーカスを移動したい

    イントラネットでホームページの管理をしています。 個人認証画面にてユーザー→パスワードを入力してもらい、認証ボタンを押してメインページへ飛ぶ画面があります。 ユーザー入力後にEnterキー押下でパスワードへ、 パスワード入力後にEnterキー押下で認証ボタンへ それぞれフォーカスを移動したいのですが、実現方法がわかりません。 javascriptでfocus()及びblur()を使えばと思いましたが、キー入力イベントの取得方法がわかりません。 ページ先頭にてdocument.onkeydownから取得する方法だと初回のみの取得しか出来ませんでした。 それぞれのオブジェクトでキー入力のイベント判定をしてフォーカスを移動する方法があれば教えてください。 OS :WIN2K ブラウザ:NetScape4.0 PG :HTML(ASP,VBScript,JavaScript)

  • 1つ前のフォーカスのあったコントロールの取得

    C#で1つ前のフォーカスのあったコントロールの取得方法がわかりません。 ボタンを押下して、1つ前にフォーカスのあったテキストボックスに文字列を表示させたいです。 わかる方いらっしゃいましたらよろしくお願いします。

  • コマンドボタンのEnterイベント後に、フォーカスを移動したい。

    コマンドボタンのEnterイベント後に、フォーカスを移動したい。 フォームに「TextBox1」(TabIndex=0)「TextBox2」(TabIndex=1)「CommandButton1」(TabIndex=2)の3つのコントロールがある場合。 CommandButton1がクリックされた場合も、TextBox2からCommandButton1に、タブキーまたはエンターキーで、フォーカスが移った場合にも、同じ処理を行い、処理結果によってTextBox1やTextBox2にフォーカスを移したいと考えています。 以下のようなサンプルを作成しました。 Private Sub CommandButton1_Enter() CommandButton1_Click End Sub Private Sub CommandButton1_Click() MsgBox ("OK") TextBox2.SetFocus End Sub この場合、CommandButton1_Enterのイベントが起こった場合、CommandButton1_Click()のTextBox2.SetFocusは効きません。 (正確には、CommandButton1_Enterイベントが終わった時点で無効でしょうか。) Enterイベントは、フォーカスが移動する前に発生するため、このイベントが終わった後に、そもそもの動作に戻り、フォーカス移動が発生してしまうからなのだと思っております。 要は、コマンドボタンにタブキーやエンターキーでフォーカスしても、コマンドボタンをクリックしたのと同じ処理を行い、所定の位置にフォーカスを持っていきたいのですが、どのように行えば良いか、わからない状況です。 よろしくお願いいたします。

  • SPREAD(GrapeCity)のセルにフォーカスを設定するにはどうしたらいいのでしょうか?

    VB.netで作成しています。 SPREAD(GrapeCity)の下記のイベントでSPREADのセルに入力された値をチェックしてエラーが無ければデータベースに登録、または更新をして入力エラーがあった場合、セルにフォーカスを設定するように記述していますがうまくフォーカスを設定する事ができません。 ・SPREADのChangeイベント ・SPREADのKeyUpイベント ・SPREADのLeaveイベント ・SPREADのCellLeaveイベント フォーカスを当てたいセルの行番号とカラム番号をSetActiveCellで指定していますが・・・ フォーカスを設定するにはどうしたらいいのでしょうか? ご存知の方がいましたらアドバイス宜しくお願いします。 では、失礼します。

  • awtでGUIを作成しているのですがイベントリスナーのことで

    こんばんは。今awtでGUIを作成しています。 テキストフィールドを作成し、入力したあとエンタ―ボタンを押したら桁数チェックなどを行い、妥当な入力であればカーソルを次のテキストフィールドに移動させ、妥当でなければ警告のダイアログボックスをだすアクションリスナーをaddActionListenerで作っていたのですが、 入力を確定させるのは何もエンターキーだけではなく、人によってはタブキーとか次のテキストボックスを選択して確定する人もいるだろうと思い、addFocuslistenerも加えました。以下がその部分です。 field1.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent ae){ String gt_field1=field1.getText(); if(gt_field1.length()==5){keycheck();} else{Tyuui("無効な入力です","5桁の文字を入力してください。");} } } ); field1.addFocusListener( new FocusListener(){ public void focusLost(FocusEvent e){ String gt_field1=field1.getText(); if(gt_field1.length()==5){keycheck();} else{Tyuui("無効な入力です","5桁の文字を入力してください。");} } } ); しかしこのようにしたら、エンターキーを押した時、妥当な入力だったら次のテキストフィールドに移動させるようにしているので、Focuslistenerも反応し、もう一度同じ処理をしてしまいました。妥当な入力でないときは警告のダイアログが2回でてきました。 そこでaddActionListenerのほうにはなにも調べさせず、フォーカスをはずすだけにしたらどうかと思ったのですが、requestFocus()もありますが他のテキストフィールドにフォーカスを当てたらまたおかしな事になりそうなのでただフォーカスをはずし、どこにもフォーカスがあっていない状態にしたいのですが、いい方法とかございましたら教えてはいただけませんか。 またEnterキーを押しただけでなく、Tabキーを押したり、マウスで別のところをクリックしてフォーカスが外れた時も桁チェックなどを行い、妥当な桁なら次のテキストフィールドにフォーカスをあてるいい方法などございましたらアドバイスの方、おねがいします。

    • ベストアンサー
    • Java
  • イベントとスレッド

    Java初心者です。 イベントとスレッドに関する質問です。 Swingを使ったアプリケーションを作成しているのですが、 以下のような現象が起きています。 1. ボタンが配置されているダイアログ(A)で、そのボタンを押下する。 2. ボタンを押下したときに実行されるメソッドで、スレッドを作成する。 3. その作成されたスレッドで、JOptionPane#showOptionDialogを実行して、ダイアログ(B)を表示する。 4.(B)が表示されている状態で、別のウィンドウで隠し、再度表示させると、(B)に配置されているボタンが押せなくなる。 4.で(B)のボタンを押せるようにしたいのですが、 うまくいきません。 スレッドとかイベントが関係していると思うのですが、 何しろ初心者なもので、よく理解していません。 実際のプログラムをお見せすることが出来ないので分かりずらいかもしれませんが、何かお気づきのことがあれば 教えて頂けないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう