【问题标题】:Why this solution taken from SOF not take effect?为什么这个取自 SOF 的解决方案没有生效?
【发布时间】:2015-03-15 03:26:27
【问题描述】:

我想让JTextField 只接受号码。我找到了解决方案here

    ((AbstractDocument)textField_time.getDocument()).setDocumentFilter(new DocumentFilter() {

        @Override
        public void insertString(DocumentFilter.FilterBypass fb, int offset, String str, AttributeSet a) throws BadLocationException {
            fb.insertString(offset, str.replaceAll("\\D++", ""), a);
        }

    });

以上是我的代码,字母还是可以输入的;

【问题讨论】:

  • 您好像忘记写完问题了?
  • @MotokoKusanagi 可能是因为你忽略了标题:)
  • @bijiDango 不,这是因为您的问题不完整;并以分号结尾。
  • 可能duplicate.

标签: java swing


【解决方案1】:

您还需要覆盖DocumentFilterreplace(...) 方法。这是在您通过 GUI 输入文本时被 Swing 文本组件调用的方法。

insertString(...) 方法仅在直接使用以下方式更新 Document 时调用:

Document doc = textField_time.getDocument();
doc.insertString(...);

查看 Implementing a Document Filter 上的 Swing 教程中的部分以获取完整的实现。您甚至可以打开“调试”变量来验证是否调用了 replace() 方法。

【讨论】:

    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多