Java Listener无法正常工作,除非我按下输入如何在文本框更改后启用它

时间:2014-10-21 15:02:19

标签: java swing awt jtextfield documentlistener

当动作执行事件时,我在JtextField内部的监听器下方, 以便在用户进行任何更改后对文本框中所做的任何更改执行操作。 但问题是代码没有启动或工作,除非你只按Enter键 代码执行代码,我需要知道我必须添加什么以及在下面的代码启用位置一旦文本Filed立即更改。我可以看到一些类似的帮助引用Oracle监听器帮助但我无法管理所以我需要直接简单的方法。

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
jTextField1.getDocument().addDocumentListener(new DocumentListener() {

public void changedUpdate(DocumentEvent e) {
JOptionPane.showMessageDialog(null, "Change case");
} 
public void insertUpdate(DocumentEvent de) {
    JOptionPane.showMessageDialog(null, "Update Case");
}

public void removeUpdate(DocumentEvent de) {
  JOptionPane.showMessageDialog(null, "Remove case");
 }
});
 // TODO add your handling code here:
}                                           

2 个答案:

答案 0 :(得分:4)

对于文本字段,

ActionListener仅侦听输入输入键。所以你的代码必须做的是:当按下 键时,在文本字段中添加一个新的DocumentListener

DocumentListener是你想要的,所以从jTextField1ActionPerformed方法中取出代码(添加文档监听器)并将其放在类的构造函数中。或者有一个私有方法,以免弄乱构造函数。

假设您正在使用Netbeans GUI编辑器(从您的方法签名看起来如此):

public class MyFrame exentds JFrame {
    public MyFrame() {
        initComponents();
        addDocumentListenerToField();
    }

    private void addDocumentListenerToField() {
        jTextField.getDocument().addDocumentListener(..);
    }
}

更新:DEMO

import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class DocListeenerDemo extends JFrame {
    private JTextField field;   
    private JLabel label;

    public DocListeenerDemo() {
        initComponents();
        addDocumentListenerToField();
    }

    private void initComponents() {
        setLayout(new GridLayout(0, 1));
        field = new JTextField(20);
        label = new JLabel("", SwingConstants.CENTER);
        add(field);
        add(label);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setLocationByPlatform(true);
    }

    private void addDocumentListenerToField() {
        field.getDocument().addDocumentListener(new DocumentListener(){
            public void changedUpdate(DocumentEvent arg0) {doYourStuff();}
            public void insertUpdate(DocumentEvent arg0) {doYourStuff();}
            public void removeUpdate(DocumentEvent arg0) {doYourStuff();}
            public void doYourStuff() {
                label.setText(field.getText());
            }
        });
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                DocListeenerDemo demo = new DocListeenerDemo();
                demo.setVisible(true);
            }
        });
    }
}

我还没有找到通过GUI工具添加DocumentListener的方法。吸。

答案 1 :(得分:0)

尝试使用actionListener而不是documentListener