簡體   English   中英

java documentlistener

[英]java documentlistener

我正在嘗試在更改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上調用此方法時,它可以正常工作。 但是當我在文本字段中更改文本時,沒有任何反應。 甚至印刷品。 有什么建議?

問題解決了。 僅當其他屬性(字體,大小,而不是文本)發生更改時,才會調用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));
            }
        });

嘗試使用ActionListener

textField.addActionListener(this);

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

我發現這個解決方案最快:

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())

這是您的問題的另一種解決方案。 您可以創建一個方法並為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));
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM