【最大10000ポイント】当たる!!質問投稿キャンペーン!

ロストフォーカスイベント時のその他のイベント(ボタンイベント)の中止方法

フィールドのロストフォーカスイベントで3文字以上入力していた場合に
エラーメッセージを表示する。
フィールドに4文字値を入力して、フォーカスをフィールドにあてたまま
ボタンを押下するとロストフォーカスイベントが走り、
同時にボタンイベントも発動してしまいます。

ロストフォーカスイベント時にエラーが発生している場合は、
ボタン押下処理を中止するようにしたいのですが、可能でしょうか?

検証は、Java1.6で行っています。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

JButtonにあるsetActionCommandを使用して、何が実行されたかコマンドを決める方法です。


イベントが発生した時、ActionEventオブジェクトからgetActionCommandを使用しコマンドを取得すれば、
どのボタンが押されたのか、唯のロストフォーカスなのか判断できるかなと。

ただ、この方法はメニューから実行、右クリックのコンテキストメニューから実行、ボタンから実行等をすべて同じ処理にしたい場合に使用する方法なので、イベントが違うとうまくいくかどうかちょっと検証が必要です。

この回答への補足

teketonさん 回答ありがとうございます。

ロストフォーカス、ボタン押下のイベント処理で共通処理が呼ばれている場合、
共通処理にて、ロストフォーカスイベントがボタン押下のイベントかを判断する方法と
理解しました。

ロストフォーカス時にエラーとなり、メッセージダイアログがでた時点で、ボタンの
イベントは中止(または、キャンセル)されることが望ましいと思っています。
上記の前提条件の場合は、どのようにするべきでしょうか?

java1.4の時は、

ロストフォーカス時にエラーとなり、メッセージダイアログがでた時点で、ボタンの
イベントは中止(または、キャンセル)されていたのですがね・・・。
なんで、Java1.6になったら、できなくなったのか・・・。 愚痴です。

補足日時:2013/03/21 13:53
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/04/02 14:57

同じ人ですが、他にはActionCommandを設定する、とか。


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

この回答への補足

teketonさん、2回も回答ありがとう御座います。

teketonさんのアドバイスを検討してみましたが、よくわかりませんでした。
よろしければ、もう少し詳細に教えて頂けませんか?

以上、宜しくお願い致します。

補足日時:2013/03/19 17:26
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/04/02 14:56

Swing?だったら、InputVerifierを使うと良さそう。


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

参考URL:http://docs.oracle.com/javase/jp/1.3/api/javax/s …

この回答への補足

回答ありがとうございます。

Swingです。
そうですね、忘れていましたがnputVerifierであれば可能っぽいですね。

補足日時:2013/03/12 20:52
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/03/12 20:54

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

QJTextFieldの入力制限

JAVAをはじめて間もない者です。

JTextFieldに入力制限をかけたいと思ってます。

・半角英数のみ入力可能。
・10バイトまでしか入力できない。

それとフォーカスが失ったときに
例えば「12345」と入力されているときに
「12345.00」と表示したいです。

以上、よろしくお願い致します。

Aベストアンサー

Javaは1.4以降をお使いですか? でしたら、JTextFieldを継承した「JFormattedTextField」クラスを使うのがよろしいかと。これはフォーマットされたテキストを表示するためのフィールドです。だいたい、以下の2つの機能を設定しておけばお望みのものができると思います。

・フォーマッタ
これは、java.textのDecimalFormatterやDateFormatterなどのFormaterクラスか、あるいはjavax.swing.textのMaskFormatterなどを使います。これらのクラスで表示フォーマットを用意し、これをJFormattedTextField作成時に引数で渡します。

・ベリファイア
入力データのベリファイを行うには、InputVerifier継承クラスを用意し、JFormattedTextFieldにsetInputVerifierで設定します。このInputVerifierクラスにはverifyメソッドを用意し、ここで値のベリファイを行ないます。

例えば、10桁の整数+2桁の小数を許可する入力フィールドだと、こんな感じになります。

// import java.text.*; を用意しておく

// JFormattedTextFieldは以下のように作成設定する
DecimalFormat df = new DecimalFormat("##########.00");
final JFormattedTextField field1 = new JFormattedTextField(df);
field1.setInputVerifier(new MyVerifier());

// ベリファイアは内部クラスで以下のように定義
static class MyVerifier extends InputVerifier{
public boolean verify(JComponent input){
boolean flg = true;
JFormattedTextField f = (JFormattedTextField)input;
String s = f.getText();
if (s.length() > 13){
flg = false;
f.setText("0000000000.00");
}
return flg;
}
}

10桁の整数以内だと.00という形で小数点以下2桁まで表示します。その桁を超えると、とりあえず"0000000000.00"に戻るようにしてあります。
 フォーマッタとベリファイアについては、JavaDoc等で調べてみるとよいでしょう。

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html

Javaは1.4以降をお使いですか? でしたら、JTextFieldを継承した「JFormattedTextField」クラスを使うのがよろしいかと。これはフォーマットされたテキストを表示するためのフィールドです。だいたい、以下の2つの機能を設定しておけばお望みのものができると思います。

・フォーマッタ
これは、java.textのDecimalFormatterやDateFormatterなどのFormaterクラスか、あるいはjavax.swing.textのMaskFormatterなどを使います。これらのクラスで表示フォーマットを用意し、これをJFormattedTextField作成時に...続きを読む

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

QrequestFocusについて

他人の作ったプログラムを見ていると
requestFocus();
というのがよく出てくるんですが、どういう操作をしているのかがよく分かりません。
意味は「フォーカスを要求」という感じで、
フォーカスは「焦点」だそうですが、焦点を合わせるってどういうことなのでしょうか?

例えば、キーイベントに関するところで使う
requestFocusはどういうことを表しているのでしょうか?教えてください。

Aベストアンサー

ここで言う「フォーカス」というのは、簡単に言うとウィンドウ内のどのコンポーネント(テキストボックスとかボタンとか)にカーソルがあるかということです。

例えば、テキストボックスAにカーソルがあって、キーを押せばそこに文字が入力できる状態になっているとき、「Aにフォーカスがある」という言い方をします。
また、テキストボックスAからテキストボックスBにカーソルを移してBに入力できる状態にすることを、「AからBにフォーカスを移す」といいます。

カーソルはテキストボックス内において文字単位で着目点を表しますが、フォーカスはウィンドウ内においてコンポーネント単位で着目点を表します。

Qデータベース内のテーブル名の取得

お世話になります。
初心者的な質問でしたらすいません。
SQL文にてデータベース内のテーブル名を
調べることができると聞いたことがあるのですが、
可能でしょうか。

もし、可能であれば、SQLの記述を教えてください。
お願いします。

Aベストアンサー

select * from tab;

私の場合、テーブル名だけ手っ取り早く知りたいとき、↑を打ちます。その他の情報も知りたいときは#2さんの仰るとおり、user_tablesで取得します。

QJavaで文字列をゼロ埋め(ゼロパディング)

Javaで文字列を前ゼロで埋め(ゼロパディング)たいのですが、
exceptionが発生してうまくいきません。
だれかお助け頂けたら助かります。

(例)123の前に0を5つ結合したい場合、

String str2="123";
String str = String.format("%08s",str2);

で問題無いと思ったのですが、
exceptionが発生してしまいます。

回答お待ちしております。

Aベストアンサー

そのExceptionはどういったExceptionなのか把握されてますか?
何が悪いのかの理由もそのExceptionからわかると思いますが。

http://docs.oracle.com/javase/jp/6/api/java/util/Formatter.html#syntax
をよく読んで"%08s"という指定ができるのかどうか確認しましょう。

やられたいことは"123"の先頭に"00000000"をつけて後ろから8文字取り出せばできると思いますが。

Q戻り値の意味がわかりません…

戻り値とはどういう値なのか簡単な例文で教えて頂けますか?

Aベストアンサー

バカくさいかもしれませんが簡単な例えをだしてみます。
2人の子供がいて、名前をそれぞれ太郎・花子にしましょう。この2人の子にある役割を決めます。
・花子は飴をもらうと、それをチョコにする役割。(できるかは別として)
・太郎は花子を呼んで飴をあげる役割。

さてこの例では太郎の飴が引数(ひきすう)になり
花子のチョコが戻り値になります。

このイメージを元に次の文を読んでみてください。

「プログラム中の関数やサブルーチンが処理を終了し
呼び出し元に処理の結果として返す値。」

これが戻り値の正しい定義です。
そのほかにはNo1さんのような役割指すときも、それを「戻り値」と呼んだりします。

QEclipseでのJDBCドライバについて

Eclipse3.1でデータベース(mysql)にアクセスするプログラムを作ったのですが下記のエラーが出ます。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

これはJDBCドライバのセットアップがうまく出来ていないからなのでしょうか?
またEclipseでは、~.jarというファイルをプロジェクトのWEB-INFのlibフォルダに入れれば使える印象があるのですが、参考書(EclipseのではなくJAVAなどの)などにあるようにTomcatのインストールフォルダ以下common/libに入れて環境変数を変更しないといけないのでしょうか?

ご存知の方教えてください、よろしくお願いします。

Aベストアンサー

WEB-INF以下に入れると実行はできるのですが、エクリプスが.javaファイルをコンパイルすることができません。projectの一覧を右クリックしてpropertyを選択し、ダイアログ右側からJava Build Pathを選択し、タグからLibrariesを選び、Add JARsボタンをおして.jarファイルを登録して下さい。
たぶんこれでコンパイルできるはずです。

Qフォーカスが外れた時の入力チェックの仕方

htmlで書かれたテキストエリアのフォーカスが外れた時に、
入力チェックを行いたいのですが

すでに
<input type=text name=abc value="">
というinputタグが存在していて
このタグに手を加えずjavascriptを使い
どうにかテキストエリアabcのフォーカスが外れた時に、
入力チェックを行いたいです

要するに
htmlで<input type=text name=abc value="" onblur="関数名">
っと書く事が出来ないという状況です。

全く案が思い浮かびません
何かいい案がおありでしたらよろしくお願い致します

Aベストアンサー

たとえばこういうのはいかがでしょうか?
document.getElementsByTagName の使い方を知らなければ、Googleなどで調べればたくさん出てくると思います。
この場合、[0]を[1]にすれば2番目のinputにイベントがセットされます。
イベントの設定については参考URLのページも参考になると思います。

<html>
<p>てすと用</p>
<input type=text name=abc value="123">
<input type=text name=abc value="456">
<script language="javascript"><!--
var input = document.getElementsByTagName('input')[0];
input.onblur = function(){ alert(this.value + "フォーカスをはずれた!") };
--></script>
</html>

参考URL:http://www.kawaz.jp/pukiwiki/index.php?JavaScript%A5%E1%A5%E2#e1a771a8

たとえばこういうのはいかがでしょうか?
document.getElementsByTagName の使い方を知らなければ、Googleなどで調べればたくさん出てくると思います。
この場合、[0]を[1]にすれば2番目のinputにイベントがセットされます。
イベントの設定については参考URLのページも参考になると思います。

<html>
<p>てすと用</p>
<input type=text name=abc value="123">
<input type=text name=abc value="456">
<script language="javascript"><!--
var input = document.getElementsByTagName('input')[0];
...続きを読む

Q日本語のプロポーショナルフォントで、一番幅が広い文字は何ですか?

プロポーショナルフォントの英文字の場合、幅が狭いのは「l(エル)」「i」、広いのは「M」や「W」かと思いますが、日本語(ひらがな、カナ、常用漢字ぐらいを含めて。)で、幅が狭い、広い文字といった文字はありますか?ある場合、どんな文字なのか、教えてください。

Aベストアンサー

#1です。
先に申し上げた通りプロポーショナルフォントは個々の文字の「空きがいい加減」なので文字の組み合わせである文章を固定した幅での表示と言うものが出来ません。なので固定幅で文章を表示したいのなら「等幅フォント」を使うしかないんです。どの文字でカウントしても無理ですShift_JISですら11280文字あるのです。それらの組み合わせなんて無限に等しいですよ?

メルマガなどでテキストメール(非htmlメール)が何故「等幅フォントでの表示」を「推奨している」かをお考えください。答えは「レイアウトを崩させない為」です。逆に言えばプロポーショナルフォントでは文字幅固定のレイアウトが組めないのです。


人気Q&Aランキング