java文档监听器

java文档监听器,java,swing,jtextfield,documentlistener,Java,Swing,Jtextfield,Documentlistener,我试图在更改JTextField的文本后调用方法 textField.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent arg0) { System.out.println("IT WORKS"); panel.setP

我试图在更改JTextField的文本后调用方法

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

            public void changedUpdate(DocumentEvent arg0) 
            {
                System.out.println("IT WORKS");
                panel.setPrice(panel.countTotalPrice(TabPanel.this));
            }
            public void insertUpdate(DocumentEvent arg0) 
            {

            }

            public void removeUpdate(DocumentEvent arg0) 
            {

            }
        });

当我在另一个ActionListener调用此方法时,它工作正常。但当我在文本字段中更改文本时,什么也没发生。甚至是普林顿。有什么建议吗?

尝试使用
ActionListener

textField.addActionListener(this);

...
public void actionPerformed(ActionEvent evt) {
   String s = textField.getText();
   System.out.println(s);
   ...
}

问题解决了。changedUpdated方法仅在其他属性(字体、大小,但不是文本)更改时调用。要在每次更改文本后调用方法,我应该将调用放入insertUpdate和removeUpdate方法中。这样:

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

            public void changedUpdate(DocumentEvent arg0) 
            {

            }
            public void insertUpdate(DocumentEvent arg0) 
            {
                System.out.println("IT WORKS");
                panel.setPrice(panel.countTotalPrice(TabPanel.this));
            }

            public void removeUpdate(DocumentEvent arg0) 
            {
                System.out.println("IT WORKS");
                panel.setPrice(panel.countTotalPrice(TabPanel.this));
            }
        });

我发现这个解决方案最快:

new JTextPane().addActionListener(new Key());

它比:

.getDocument().addDocumentListener( .... changeUpdate())

这是解决你问题的另一个办法。不必在每个方法下重复相同的代码,您可以创建一个方法并为changedUpdate、insertUpdate、removeUpdate调用该方法

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

        public void changedUpdate(DocumentEvent arg0) 
        {
            printMyLines();
        }
        public void insertUpdate(DocumentEvent arg0) 
        {
            printMyLines();
        }

        public void removeUpdate(DocumentEvent arg0) 
        {
            printMyLines();
        }

        private void printMyLines()
        {
            System.out.println("IT WORKS");
            panel.setPrice(panel.countTotalPrice(TabPanel.this));
        }
    });

您是否试图更改
文本字段中的值?如果是这样的话,你就不能,因为文档监听器不能更改它们被分配到的文本字段中的值。这有点可疑。如果以后可以在不使用键盘的情况下更改字段内容,该怎么办?(如“重置字段”按钮或撤消)复制和粘贴如何?使用正确的方法更安全。
textField.getDocument().addDocumentListener(new DocumentListener()
    {

        public void changedUpdate(DocumentEvent arg0) 
        {
            printMyLines();
        }
        public void insertUpdate(DocumentEvent arg0) 
        {
            printMyLines();
        }

        public void removeUpdate(DocumentEvent arg0) 
        {
            printMyLines();
        }

        private void printMyLines()
        {
            System.out.println("IT WORKS");
            panel.setPrice(panel.countTotalPrice(TabPanel.this));
        }
    });