【问题标题】:can't clear jtextfield using Documentlistener无法使用 Documentlistener 清除 jtextfield
【发布时间】:2013-10-11 22:16:17
【问题描述】:

我有一个文本字段,当用户插入一定数量的字符时,程序应将其放入 JTable 并清除文本字段,但它会触发 Jtextfield.setText(""); 的事件

这是我的代码:

jTextField2.getDocument().addDocumentListener(new DocumentListener() {

        @Override
        public void insertUpdate(DocumentEvent e) {
            printIt();
        }

        @Override
        public void removeUpdate(DocumentEvent e) {

        }

        @Override
        public void changedUpdate(DocumentEvent e) {

        }

        private void printIt() {
            //DocumentEvent.EventType type = documentEvent.getType();
            String code=jTextField2.getText().trim();

           // if(type.toString().trim().length()==13)
            if (code.length()==4) {
                   list.add(code);
                   mod.addRow(new Object[]{code});
                   jTextField2.setText(""); 
            }
        }
    });
}

【问题讨论】:

    标签: java swing jtextfield documentlistener


    【解决方案1】:

    您不能在 DocumentListener 中修改文本字段的文档。使用DocumentFilter 修改文本。

    文档侦听器不应修改文档内容;这 在通知侦听器时更改已经完成 改变。相反,编写一个自定义文档来覆盖 insertString 或 remove 方法,或两者​​兼而有之。

    在另一部分。

    您可能希望在文档侦听器中更改文档的文本。 但是,您永远不应该修改文本组件的内容 在文档侦听器中。如果你这样做,该程序可能会 僵局。 相反,您可以使用带格式的文本字段或提供 文档过滤器

    【讨论】:

    • 那我该怎么做呢?
    • 是的,先生,但我仍然需要使用文档侦听器,我正在为条形码扫描仪执行此程序,因此每次读取后它应该清除文本字段。
    • 嗯,我想我明白了,我会阅读更多关于它的信息,非常感谢:)
    【解决方案2】:

    要在使用 DocumentListener 时更新文本字段,您需要将代码包装在 SwingUtilities.invokeLater() 中,以便在对 Document 进行所有更新后执行代码。

    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            jTextField2.setText("");
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 2012-10-25
      • 2017-07-16
      • 1970-01-01
      • 2013-05-23
      • 2013-03-10
      • 2015-06-21
      • 2016-10-13
      • 2020-06-03
      相关资源
      最近更新 更多