2009-04-07 24 views
1

空白をJTextFieldに入れることをユーザーに禁止する方法を教えてください。
空白を書き込むこともできません。JTextFieldに空白がない

答えて

1

キーマップを使用できます。 this example禁止スペースをチェックしてください次のようになり、次のようになります。

KeyStroke keyStroke = KeyStroke.getKeyStroke(Character.valueOf(' '), 0); 
textField.getInputMap(JComponent.WHEN_FOCUSED).put(keyStroke, "none"); 
3

私はあなたがinsertStringメソッドをオーバーライドする拡張PlainDocumentでのJTextFieldのドキュメントを設定することをお勧め。以下のように(また、素敵なサイズを制限するために...)
何か:

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

+0

DocumentFilterが最適です。また、insertString以外のテキストを挿入するメソッドもあります。 –

+0

@トム:確かに、私はそれを見たことがありません。 "フィルタリング"のための良い方法(私は今知っている)! –

+0

ニースですが、replaceStringも実装しなければなりませんでした.JTextFieldではinsertStringが使われていないようです。 – lapo

2

おそらく、これについてはDocumentDocumentFilterを使用して、型付き、貼り付けまたはその他の方法で挿入されたスペースを削除することをお勧めします。私は、このテクニックを示している小さなSwingプログラムに関するウェブログエントリを書きました(この場合、整数入力のみを許可する) - DescriptionSource

Documentのサブタイプを拡張することは可能ですが、エラーが発生しやすくなり、特定の実装につながります。

キープレスをインターセプトしようとすると、実際には機能しません(間違った抽象レベルにあるため、貼り付けやdndなどのテキストを挿入することができなくなります)。

JFormattedTextFieldは、すべてのUIが大きな時間を吸っているかどうかを確認する良い方法です。

関連する問題