5

我试图在更改 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 上调用此方法时,它工作正常。但是当我更改文本字段中的文本时,什么也没有发生。甚至打印。有什么建议么?

4

4 回答 4

9

问题解决了。仅当其他属性(字体、大小,但不是文本)发生更改时才调用 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));
            }
        });
于 2012-05-25T16:17:04.973 回答
1

尝试使用ActionListener

textField.addActionListener(this);

...
public void actionPerformed(ActionEvent evt) {
   String s = textField.getText();
   System.out.println(s);
   ...
}
于 2012-05-25T16:08:54.380 回答
0

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

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

class Key extends KeyAdapter{
private static final Object lock = new Object();
        private static int keydiff=0;
        public void keyReleased(KeyEvent e) {
            switch(e.getKeyCode())
            {
                //IGNORE FUNCTIONAL KEYS
                case 38 :
                case 39 :
                case 37 :
                case 40 :
                case 17 :
                case 157 :
                case 10 : break;
                default : keydiff++;
            }

            if(keydiff!=0)
            {
              synchronized(lock){
                  keydiff=0;
                  //EVENT FIRED HERE
              }             
            }
        }
    }

它比:

.getDocument().addDocumentListener( .... changeUpdate())
于 2012-06-23T19:58:35.153 回答
0

这是您问题的另一种解决方案。不必在每个方法下重复相同的代码,您可以创建一个方法并为 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));
        }
    });
于 2014-04-18T22:11:29.460 回答