java - 使用 JFormattedTextField(NumberFormat.getIntegerInstance()) 时出错;

标签 java swing

当我尝试使用时遇到问题:

JFormattedTextField(NumberFormat.getIntegerInstance());

当我将数字放入数字框中时,我收到错误消息,因为数字之间有空格,如下所示:200 000 并且当数字输入时,我输入的数字错误是 200000 我没有收到任何错误。

最佳答案

您可以使用 MaskFormatter,如 How to use Formatted Text Field 中所述。为了避免获得非数字字符:

    JFormattedTextField textField = new JFormattedTextField(new MaskFormatter("#######"));

但是,如果您使用这种方式,当您复制粘贴文本200 000时,它要么不会被粘贴,要么只会粘贴200。 (空格后的其余部分 - 非数字字符将被忽略)

为了允许此操作,您必须使用 a Document Filter只保留数字。因此,当输入带有空格 200 000 时,它将保留 200000:

class NumberOnlyDocumentFilter extends DocumentFilter {
    @Override
    public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr)
            throws BadLocationException {
        super.insertString(fb, offset, keepOnlyDigits(string), attr);
    }

    @Override
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
            throws BadLocationException {
        super.replace(fb, offset, length, keepOnlyDigits(text), attrs);
    }

    private String keepOnlyDigits(String text) {
        StringBuilder sb = new StringBuilder();
        for (char c : text.toCharArray())
            if (Character.isDigit(c))
                sb.append(c);
        return sb.toString();
    }
}

并“安装”它:

JTextField textField = new JTextField();
AbstractDocument document = (AbstractDocument) textField.getDocument();
document.setDocumentFilter(new NumberOnlyDocumentFilter());

关于java - 使用 JFormattedTextField(NumberFormat.getIntegerInstance()) 时出错;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369782/

相关文章:

java - 如何将 JFrame 放入 Java Swing 中现有的 JPanel 中?

java - 添加新组件时如何在 jpanel 末尾设置滚动条

java - 批处理文件重命名——从列表中插入文本(在 Python 或 Java 中)

java - 尝试连接到 AWS 实例.. Ping 失败,而 Telnet/SSH 工作正常

java - 如何获取适用于 Mac OS X 的 JDK 8 - 32 位以进行 Openhab 开发?

java - 如何使单元格表现得可编辑但只读?

java - 当我在 jscrollpane 上添加 jtable 时,水平滚动条不起作用

java - 监听 JFrame 的 Action

java - “Type mismatch: cannot convert int to byte”

java - 超时后Executor Service剩余任务