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 で呼び出すと、問題なく動作します。しかし、テキスト フィールドのテキストを変更しても何も起こりません。printlnでさえ。助言がありますか?

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 に答える