• ベストアンサー

JTextFieldの入力制限

JAVAをはじめて間もない者です。 JTextFieldに入力制限をかけたいと思ってます。 ・半角英数のみ入力可能。 ・10バイトまでしか入力できない。 それとフォーカスが失ったときに 例えば「12345」と入力されているときに 「12345.00」と表示したいです。 以上、よろしくお願い致します。

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

  • ベストアンサー
noname#49664
noname#49664
回答No.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/index.html

その他の回答 (1)

回答No.1

swingには疎いのですが、参考URLが参考になれば。 フォーカスが外れたときの処理は FocusListener を実装すればよろしいかと。

参考URL:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21043&forum=12&13