JTextField 上的最大值
Maximum value on JTextField
我想要一个 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);
(然后将其添加到 BorderLayout.CENTER
处的 JFrame
window,其中没有任何其他内容)
但它不起作用(我无法输入任何内容)。我究竟做错了什么?
注意: 我更愿意使用与上述方法类似的方法(使用 Document
s),而不必求助于 JFomattedTextField
,如果可能的话。
But it doesn't work (I can't type anything).
if (Double.parseDouble(s) > 12345) {
fb.replace(0, 5, "12345", attrs);
}
如果该值大于 12345,您将使用硬编码值更新文档。
但是,如果该值小于 12345,则您什么都不做。您需要通过调用 super.replace(...)
或 super.insertString()
.
在文档中插入键入的字符
我想要一个 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);
(然后将其添加到 BorderLayout.CENTER
处的 JFrame
window,其中没有任何其他内容)
但它不起作用(我无法输入任何内容)。我究竟做错了什么?
注意: 我更愿意使用与上述方法类似的方法(使用 Document
s),而不必求助于 JFomattedTextField
,如果可能的话。
But it doesn't work (I can't type anything).
if (Double.parseDouble(s) > 12345) {
fb.replace(0, 5, "12345", attrs);
}
如果该值大于 12345,您将使用硬编码值更新文档。
但是,如果该值小于 12345,则您什么都不做。您需要通过调用 super.replace(...)
或 super.insertString()
.