【问题标题】:How to enter data to swing.JTextField without pressing the enter key?如何在不按回车键的情况下向 swing.JTextField 输入数据?
【发布时间】:2011-08-15 09:11:29
【问题描述】:

我正在使用 net beans (Java) 构建一个 Gui,我的问题是如何在不按 Enter 键的情况下将文本字段中的字符串获取到变量中? 我写了这段代码:

private void idTextBoxActionPerformed(java.awt.event.ActionEvent evt)   {                                          

   this.Id  =  evt.getActionCommand();
}

问题是,如果我只是输入文本并移动到下一个文本字段,数据不会进入 Id 变量,如果我按 Enter 一切正常。

【问题讨论】:

    标签: java swing


    【解决方案1】:

    按 Enter 会从您在 actionPerformed 方法中侦听的文本字段中调用 ActionEvent,这就是为什么您的代码仅适用于该场景的原因。

    您可以使用 FocusListener 来实现您想要的。您将需要收听focusLost 事件,即当您离开文本字段时。

    class foo implements FocusListener {
        JTextField textField = new JTextField("A TextField");
        textField.addFocusListener(this);
    
        public void focusGained(FocusEvent e) {
           // Do whatever you want
        }
    
        public void focusLost(FocusEvent e) {
           // Save the text in the field to your id variable
        }
    }
    

    编辑

    以下教程显示how to use a formatted textfield。您可以忽略格式化位并专注于它的propertyChangeListner 方面。 这个想法与我的第一个示例相同,但使用了不同类型的侦听器。

    【讨论】:

    • 感谢您的输入。这是唯一的方法吗?可以配置它的文本字段属性吗?
    • 您需要一个监听器来监听文本字段上的事件,否则程序将不知道文本字段中发生了什么,如果有的话。这不是做你想做的事的唯一方法,但它是一种非常简单和有效的方法。 ;) 请参阅我的编辑以了解使用 propertyChangeListener 的另一种方法
    【解决方案2】:

    您可以使用动作事件或焦点事件来跟踪组件级别的更改。但如果您感兴趣的文本发生变化,那么您应该考虑使用DocumentListener。阅读教程here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 2021-04-16
      • 2017-10-22
      • 1970-01-01
      相关资源
      最近更新 更多