无法使用Documentlistener清除jtextfield

时间:2013-10-04 19:29:50

标签: java swing jtextfield documentlistener

我有一个文本字段,当用户插入一定数量的字符时,程序应将其放在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 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

您无法在DocumentListener中修改文本字段的doucment。使用DocumentFilter修改文字。

  

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

在另一部分。

  

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