ユーザーがJTextFieldに空白を入れることを禁止するにはどうすればよいですか?
空白を書くことさえできないはずです。
3 に答える
insertString メソッドをオーバーライドする拡張された PlainDocument を使用して JTextField の Document を設定することをお勧めします。(サイズを制限するのもいいです...)次の
ようなもの:
Document doc = new PlainDocument() {
@Override
public void insertString(int offs, String str, AttributeSet attr)
throws BadLocationException {
String newstr = str.replaceAll(" ", ""); // could use "\\s" instead of " "
super.insertString(offs, newstr, attr);
}
@Override
public void replace(int offs, int len, String str, AttributeSet attr)
throws BadLocationException {
String newstr = str.replaceAll(" ", ""); // could use "\\s" instead of " "
super.replace(offs, len, newstr, attr);
}
};
textField.setDocument(doc);
EDIT:
replace
オーバーライド/実装する必要があります!
おそらくこれを行う最善の方法は、入力、貼り付け、または挿入されたスペースを削除する aDocument
とともに aを使用することです。DocumentFilter
(編集: この質問はもともと、この手法を示す小さな Swing プログラムに関するブログ エントリにリンクされていました (その場合、整数入力のみを許可する)。)
のサブタイプを拡張するDocument
ことは可能ですが、エラーが発生しやすくなります (そして、特定の実装に結び付けられます)。
キーの押下を傍受しようとしても、実際には機能しません (抽象化のレベルが間違っているため、貼り付け、dnd などのテキストを挿入できる他の方法を見逃しています)。
JFormattedTextField
これは、UI が大きな時間を無駄にすることを確認するための良い方法です。
キーマップを使用できます。スペースを許可しないこの例を確認してください。次のようになります。
KeyStroke keyStroke = KeyStroke.getKeyStroke(Character.valueOf(' '), 0);
textField.getInputMap(JComponent.WHEN_FOCUSED).put(keyStroke, "none");