【问题标题】:Let ActionListener listen for change in JTextField instead of only enter?让 ActionListener 监听 JTextField 中的变化而不是只输入?
【发布时间】:2012-01-13 02:44:40
【问题描述】:

所以你可能知道,如果你有一个文本字段并且你添加了一个 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 事件中记录的)?

【问题讨论】:

标签: java swing actionlistener jtextfield


【解决方案1】:

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

要使用文档和文档侦听器功能,请按照上面的建议扩展您的类(可能但不一定是 JFrame),以便它实现 DocumentListener 接口。实现接口的所有方法(很可能您的 java ide 可以为您半自动完成。仅供参考,DocumentListener 接口具有三种方法,一种用于插入字符(到文本字段中),一种用于删除字符,另一种用于更改属性。您将要实现前两个,因为在添加字符(第一个)或删除(第二个)字符时调用它们。要获取更改的文本,您可以向文档询问文本,或者更简单地调用 myTextField.getText()。

最棒的!

菲尔·特洛伊

【讨论】:

【解决方案2】:

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

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

但是我如何倾听变化呢?你们不能告诉我简单的方法,而不是“教育我”关于文档侦听器吗?

【讨论】:

  • 当我问这个问题时,我暗示我知道 ActionListener 是如何工作的,因此我也应该知道 DocumentListener 如何(弄清楚如何)工作。答案绰绰有余。如前所述,您将 DocumentListener 添加到 JTextField 的文档中,并且您可以检查 API Javadocs 以了解特定侦听器具有哪些功能。
  • 也许你可以从这个coderanch.com/t/610054/GUI/java/…得到一个想法
【解决方案3】:

来自@JRL的回答


使用底层文档:

myTextField.getDocument().addDocumentListener();

【讨论】:

  • PropertyChangeEvent 怎么样?
猜你喜欢
  • 1970-01-01
  • 2021-04-15
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 2021-09-21
  • 1970-01-01
  • 2012-12-01
相关资源
最近更新 更多