こんばんは。今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キーを押したり、マウスで別のところをクリックしてフォーカスが外れた時も桁チェックなどを行い、妥当な桁なら次のテキストフィールドにフォーカスをあてるいい方法などございましたらアドバイスの方、おねがいします。
No.1ベストアンサー
- 回答日時:
次に示すように、いろんなやり方があるけど、入力チェックもキーの動作のカスタマイズも、Swingのほうが設備が整っていて楽ですよ。
---------------------------------------------------
import java.awt.*;
import java.awt.event.*;
public class TfFocus{
static Frame frame;
static TextField tf1, tf2;
static Label lab1, lab2;
static boolean actionProcessed = false;
public static void main(String[] args){
frame = new Frame();
tf1 = new TextField(10);
tf2 = new TextField(10);
lab1 = new Label("_______________________________");
lab2 = new Label("_______________________________");
frame.setLayout(new FlowLayout(FlowLayout.LEFT));
frame.add(tf1);
frame.add(tf2);
frame.add(lab1);
frame.add(lab2);
tf1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if (tf1.getText().length() != 5){
lab2.setText("");
lab1.setText("A: 5つの文字を入力しておくれ");
}
else{
actionProcessed = true;
lab2.setText("");
lab1.setText("A: よろしい!,次へ行け");
tf2.requestFocusInWindow();
}
}
});
tf1.addFocusListener(new FocusListener(){
public void focusLost(FocusEvent e){
if (actionProcessed){
return;
}
else if (tf1.getText().length() != 5){
lab1.setText("");
lab2.setText("F: 5つの文字を入力してね");
tf1.setText("");
tf1.requestFocusInWindow();
}
else{
lab2.setText("いいわよ!では次ね");
}
}
public void focusGained(FocusEvent e){
}
});
frame.pack();
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
------------------------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Java java final 1 2022/06/10 22:49
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- JavaScript 【jquery】EasyUIのSubGridにMySQLのテーブルデータを表示&編集にしたい 5 2022/05/02 13:10
- マウス・キーボード キーボード設定で困っています。長文です。 2 2022/12/10 12:44
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java junit list同士の比較方法
-
Java本格じゃんけんで
-
’じゃんけん’をするプログラム...
-
画面のリサイズについて
-
cadで作った図面をフレーム上で...
-
Java subSetメソッドについて
-
VBAで配列の計算
-
配列にnullを代入すると、null...
-
ループ処理の際、最後だけ","を...
-
配列をセッションに割り当てた後で
-
1~100までの数字を表示し、か...
-
Log4jで機能毎に別ファイルへ出...
-
Junitテストでvoid戻り値メッソ...
-
シャットダウンフックが呼ばれない
-
EXCEL VBA で、0から?1から?
-
テキストボックスに入力された...
-
べき乗
-
グレイコードの変換
-
C# ListBoxのインデックスの値...
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java junit list同士の比較方法
-
javaで文字数制限するには?
-
JTableの列ヘッダ
-
TextAreaでの文字の色
-
最後の行に移動するには?
-
【Swing】JPanel クラス外から...
-
4択クイズでのランダム出題の...
-
コンパイルエラー <identifier...
-
JPanelの重ね方/OverlayLayout他
-
JPanelの切り替えと再描画
-
エラーで式の開始が不正ですと...
-
JTable の 列幅を個別に設定す...
-
VB6.0でのTextboxの高さ変更
-
ボタンクリック後パネルを再描...
-
ArrayListの使い方について(初...
-
JavaでのSwingを使った簡易電卓...
-
連番をオブジェクト名の最後に...
-
あるコンボボックスを選択する...
-
Buttonを押すと画像が表示され...
-
KeyListenerの使い方について
おすすめ情報