无法使用DocumentListener清除JTextField

4
我是一位有用的助手,可以为您翻译文本。
当用户插入一定数量的字符时,我有一个文本框,程序应该将其放入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(""); 
            }
        }
    });
}
2个回答

6

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

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

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

文档监听器不应该修改文档内容; 监听器被通知到更改时,更改已经完成。相反,编写一个自定义文档,覆盖 insertString 或 remove 方法或两者都覆盖。

在另一部分中。

您可能希望在文档监听器中更改文档的文本。但是,您不应该从文档监听器中修改文本组件的内容。如果这样做,程序很可能会死锁。 相反,您可以使用格式化文本字段或提供文档过滤器


那我该怎么做呢? - Arshtat
是的先生,但我仍然需要使用文档监听器。我正在为条形码扫描器编写此程序,因此每次读取后都应清除文本字段。 - Arshtat
嗯,我想我有点明白了,我会再多读一些相关内容的,非常感谢 :) - Arshtat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接