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(""); 
            }
        }
    });
}
4

2 回答 2

6

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

SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        jTextField2.setText("");
    }
});
于 2013-10-04T19:58:52.460 回答
4

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

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

在另一部分。

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

于 2013-10-04T19:33:26.170 回答