1

ユーザーがJTextFieldに空白を入れることを禁止するにはどうすればよいですか?
空白を書くことさえできないはずです。

4

3 に答える 3

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オーバーライド/実装する必要があります!

于 2009-04-07T14:19:59.680 に答える
2

おそらくこれを行う最善の方法は、入力、貼り付け、または挿入されたスペースを削除する aDocumentとともに aを使用することです。DocumentFilter(編集: この質問はもともと、この手法を示す小さな Swing プログラムに関するブログ エントリにリンクされていました (その場合、整数入力のみを許可する)。)

のサブタイプを拡張するDocumentことは可能ですが、エラーが発生しやすくなります (そして、特定の実装に結び付けられます)。

キーの押下を傍受しようとしても、実際には機能しません (抽象化のレベルが間違っているため、貼り付け、dnd などのテキストを挿入できる他の方法を見逃しています)。

JFormattedTextFieldこれは、UI が大きな時間を無駄にすることを確認するための良い方法です。

于 2009-04-07T14:33:40.583 に答える
2

キーマップを使用できます。スペースを許可しないこの例を確認してください。次のようになります。

KeyStroke keyStroke = KeyStroke.getKeyStroke(Character.valueOf(' '), 0);
textField.getInputMap(JComponent.WHEN_FOCUSED).put(keyStroke, "none");
于 2009-04-07T14:15:08.177 に答える