限制 JTextField 只接受某些字符
Restrict JTextField to only accept certain characters
我有 4 个 JTextFields
应该只接受某些字符:
- 二进制数 (
0
, 1
)
- 八进制数字,所以 (
0
- 7
)
- 所有数字 (
0
- 9
)
- 所有十六进制字符(
0
- 9
, a
- f
, A
- F
)
用户不能输入禁止字符。
我知道之后如何验证输入,但不知道如何过滤它。
我尝试使用 MaskFormatter
,但我根本无法输入任何内容。
MaskFormatter binaryFormatter = new MaskFormatter();
binaryFormatter.setValidCharacters("01");
JFormattedTextField binaryText = new JFormattedTextField(binaryFormatter);
您不想格式化值,您想要过滤内容。在 JTextField
上的平原上使用 DocumentFilter
首先查看 Implementing a DocumntFilter and Examples 了解更多详情...
例如,一个"binary filter",它将只接受0
和1
public class BinaryDocumentFilter extends DocumentFilter {
@Override
public void insertString(DocumentFilter.FilterBypass fb, int offset,
String text, AttributeSet attr)
throws BadLocationException {
StringBuilder buffer = new StringBuilder(text.length());
for (int i = buffer.length() - 1; i >= 0; i--) {
char ch = buffer.charAt(i);
if (ch == '0' || ch == '1') {
buffer.append(ch);
}
}
super.insertString(fb, offset, buffer.toString(), attr);
}
@Override
public void replace(DocumentFilter.FilterBypass fb,
int offset, int length, String string, AttributeSet attr) throws BadLocationException {
if (length > 0) {
fb.remove(offset, length);
}
insertString(fb, offset, string, attr);
}
}
可以直接应用于字段的Document
:
JTextField binaryField = new JTextField(10);
((AbstractDocument)binaryField.getDocument()).setDocumentFilter(new BinaryDocumentFilter());
我有 4 个 JTextFields
应该只接受某些字符:
- 二进制数 (
0
,1
) - 八进制数字,所以 (
0
-7
) - 所有数字 (
0
-9
) - 所有十六进制字符(
0
-9
,a
-f
,A
-F
)
用户不能输入禁止字符。
我知道之后如何验证输入,但不知道如何过滤它。
我尝试使用 MaskFormatter
,但我根本无法输入任何内容。
MaskFormatter binaryFormatter = new MaskFormatter();
binaryFormatter.setValidCharacters("01");
JFormattedTextField binaryText = new JFormattedTextField(binaryFormatter);
您不想格式化值,您想要过滤内容。在 JTextField
DocumentFilter
首先查看 Implementing a DocumntFilter and Examples 了解更多详情...
例如,一个"binary filter",它将只接受0
和1
public class BinaryDocumentFilter extends DocumentFilter {
@Override
public void insertString(DocumentFilter.FilterBypass fb, int offset,
String text, AttributeSet attr)
throws BadLocationException {
StringBuilder buffer = new StringBuilder(text.length());
for (int i = buffer.length() - 1; i >= 0; i--) {
char ch = buffer.charAt(i);
if (ch == '0' || ch == '1') {
buffer.append(ch);
}
}
super.insertString(fb, offset, buffer.toString(), attr);
}
@Override
public void replace(DocumentFilter.FilterBypass fb,
int offset, int length, String string, AttributeSet attr) throws BadLocationException {
if (length > 0) {
fb.remove(offset, length);
}
insertString(fb, offset, string, attr);
}
}
可以直接应用于字段的Document
:
JTextField binaryField = new JTextField(10);
((AbstractDocument)binaryField.getDocument()).setDocumentFilter(new BinaryDocumentFilter());