プロが教える店舗&オフィスのセキュリティ対策術

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

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

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

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

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

A 回答 (2件)

swingには疎いのですが、参考URLが参考になれば。



フォーカスが外れたときの処理は
FocusListener
を実装すればよろしいかと。

参考URL:http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
    • good
    • 2

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/inde …
    • good
    • 0

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