数字入力のみを受け付けるテキストフィールド
import javax.swing.*;
import javax.swing.text.*;
/**
* 数字入力のみを受け付けるテキストフィールドです。
*/
public class JNumberField extends JTextField {
/**
* 新しい NumberField を構築します。
* デフォルトモデルが作成され、初期文字列は null で、列数が 0 に設定されます。
*/
public JNumberField() {
super();
}
/**
* 指定された列数で新しい空の NumberField を構築します。
* デフォルトモデルが作成され、初期文字列は null に設定されます。
* @param columns 適切な幅を計算するのに使う列数。
*/
public JNumberField(int columns) {
super(columns);
}
/**
* 指定されたテキストで初期化される新しい NumberField を構築します。
* デフォルトモデルが作成され、列数は 0 です。
* @param text 表示されるテキストまたは null
*/
public JNumberField(String text) {
super(text);
}
/**
* 指定されたテキストと列数で初期化される新しい NumberField を構築します。
* デフォルトモデルが作成されます。
* @param text 表示されるテキストまたは null
* @param columns 適切な幅を計算するのに使う列数。
*/
public JNumberField(String text, int columns) {
super(text, columns);
}
/**
* モデルが明示的に指定されない場合は、構築時に使うモデルのデフォルト実装を作成します。
* NumberDocument のインスタンスが返されます。
*/
protected Document createDefaultModel() {
return new NumberDocument();
}
/**
* 数値ドキュメントです。
*/
static class NumberDocument extends PlainDocument {
/** 入力が許される文字 */
private String value = "0123456789";
/**
* ドキュメントに内容を挿入します。
* @param offs 開始オフセット >= 0
* @param str 挿入する文字列。null や空の文字列の場合は何もしない
* @param a 挿入されたコンテンツの属性
* @throws BadLocationException 指定された挿入の位置が、ドキュメント内の有効な位置ではない場合
*/
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
if((str == null) || (str.equals(""))) {
return;
}
for(int i = 0 ; i < str.length() ; i++) {
if (value.indexOf(str.substring(i, i + 1)) == -1) {
return;
}
}
super.insertString(offs, str, a);
}
}
}