JTextField的最大值

ricky3350

我想拥有一个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,其中没有其他内容)

但这是行不通的(我无法输入任何内容)。我究竟做错了什么?

注意:我宁愿按照上述方法(使用Documents)使用某些东西JFomattedTextField,如果可能的不必诉诸类似的东西

卡米克尔

但这是行不通的(我无法输入任何内容)。

if (Double.parseDouble(s) > 12345) {
    fb.replace(0, 5, "12345", attrs);
}

如果该值> 12345,则使用硬编码值更新文档。

但是,如果值<12345,则您什么也不做。您需要通过调用super.replace(...)在文档中插入键入的字符super.insertString()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章