我想拥有一个JTextField
只能键入数字(整数和小数),并且只能键入12345以下和0以上的数字。我该怎么做?我现在所拥有的:
JTextField tf = new JTextField();
final PlainDocument doc = new PlainDocument();
doc.setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
String s = doc.getText(0, offset) + string + doc.getText(offset, doc.getLength() - offset);
try {
if (Double.parseDouble(s) > 12345) {
fb.replace(0, 5, "12345", attr);
}
} catch (NumberFormatException e) {
fb.insertString(offset, string.replaceAll("\\D++", ""), attr);
}
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
String s = (doc.getText(0, offset) + text + doc.getText(offset, doc.getLength() - offset)).trim();
try {
if (Double.parseDouble(s) > 12345) {
fb.replace(0, 5, "12345", attrs);
}
} catch (NumberFormatException e) {
fb.insertString(offset, text.replaceAll("\\D++", ""), attrs);
}
}
});
tf.setDocument(doc);
(然后将其添加到位于的JFrame
窗口中BorderLayout.CENTER
,其中没有其他内容)
但这是行不通的(我无法输入任何内容)。我究竟做错了什么?
注意:我宁愿按照上述方法(使用Document
s)使用某些东西JFomattedTextField
,如果可能的话,不必诉诸类似的东西。
但这是行不通的(我无法输入任何内容)。
if (Double.parseDouble(s) > 12345) {
fb.replace(0, 5, "12345", attrs);
}
如果该值> 12345,则使用硬编码值更新文档。
但是,如果值<12345,则您什么也不做。您需要通过调用super.replace(...)
或在文档中插入键入的字符super.insertString()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句