让ActionListener监听JTextField中的更改而不是仅输入?

时间:2011-12-05 10:33:27

标签: java swing actionlistener jtextfield

您可能知道,如果您有一个文本字段并且向其添加了一个ActionListener,它将只收听Enter按钮的按键。但是,我想让我的ActionListener监听文本中的更改。所以基本上我有这个:

    public static JPanel mainPanel() { 
    JPanel mainp = new JPanel(); 
    JTextArea areap = new JTextArea("Some text in the textarea"); 
    JTextField fieldp = new JTextField("Edit this"); 
    areap.setEditable(false); 
    fieldp.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
             if(//change in textfield, for instance a letterpress or space bar)
                   { 
                        //Do this
                   } 
        }
    });
    mainp.add(areap);
    mainp.add(fieldp); 
    return mainp;
}

我可以通过任何方式收听文本中的更改(如actionPerformed事件中记录的那样)?

3 个答案:

答案 0 :(得分:21)

来自@JRL的答案


使用基础文档:

myTextField.getDocument().addDocumentListener();

答案 1 :(得分:2)

是的,但什么是文档监听器以及如何使用它?你并没有真正回答这个问题。

我的应用程序用户界面中有一个JTextField。当用户对其进行任何更改时,我希望检查附近的JCheckBox。目的是告诉应用程序使用输入的值。用户经常在那里输入值,但如果他们没有明确告诉应用程序使用它,那么应用程序会继续忽略它。我不应该“训练”用户,而应该遵循最不惊讶的原则并自动检查“使用此值”框。

但我该如何倾听改变呢?难道你们不能告诉我简单的方法,而不是“教育我”文件听众吗?

答案 2 :(得分:0)

文档是java swing用于在JTextField中存储文本的机制。 DocumentListeners是实现DocumentListener接口的对象,因此您可以列出文档中的更改,即JTextField文本的更改。

要使用document和documentlistener功能,如上所述扩展您的类(可能但不一定是JFrame),以便它实现DocumentListener接口。实现接口的所有方法(很可能你的java ide可以半自动地为你做.FYI,DocumentListener接口有三个方法,一个用于插入字符(在文本字段中),一个用于删除字符,一个用于更改属性。当添加字符(第一个)或删除(第二个)时,您将要实现前两个。要获取更改的文本,您可以向文档询问文本,或者更简单地调用myTextField.getText()。

C' est tout!

菲尔·特洛伊