【问题标题】:Implementing an actionlistener to a JTextField为 JTextField 实现 actionlistener
【发布时间】:2016-10-29 23:37:39
【问题描述】:

我目前正在尝试实现一个 actionlistener,它从一个 textField input 获取文本并将其设置为字符串 direction,如下所示:

//Creates textField
JTextField input=new JTextField(20);
input.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent event) {
    direction=input.getText();
  }
});

但是,此代码会引发错误:

javax.swing.JTextField 类型中的方法 addActionListener(java.awt.event.ActionListener) 不适用于参数(new ActionListener(){})

我如何正确地为我正在尝试做的事情创建一个动作监听器?

【问题讨论】:

  • 您确定您的导入语句正确吗?我认为你所拥有的应该可以工作。
  • 您的问题是缺少相关代码,这些代码可以使其无需猜测即可回答。这就是为什么您应该始终为此类问题创建并发布有效的minimal reproducible example,并且您的 MCVE 应该包含导入语句。
  • 是的,重命名您在某处创建的名为ActionListener 的类。避免使用与常见核心 Java 类冲突的类名称。

标签: java swing actionlistener jtextfield


【解决方案1】:

从您提供的内容来看,您似乎已经导入或实现了一个名为 ActionListener 的类,而不是 java.awt.event.ActionListener(类名冲突)。尝试将参数限定为 java.awt.event.ActionListener:

//Creates textField
JTextField input=new JTextField(20);
input.addActionListener(new java.awt.event.ActionListener() {
  public void actionPerformed(ActionEvent event) {
    direction=input.getText();
  }
});

【讨论】:

  • “尝试限定参数” 重命名自定义 ActionListener.. 会更有意义。
  • 视情况而定。在 GUI 编程中使用 java.util.List 和 java.awt.List 是很常见的。您必须至少对其中之一的引用进行限定,以避免类名冲突。
  • 是的,但它们都是 J2SE 核心类,每个的命名都有意义。 J2SE 中既没有另一个ActionListener,也没有任何充分的理由来创建自定义ActionListener。 “常见”问题不适用于此处。
  • 我认为没有足够的信息来确定 OP 是否应该重命名该类。它可能是从第三方库导入的,也可能是被大量受众使用的库的核心组件。重命名它可能会破坏许多下游消费者。
  • Action 与 Listener 结合是所需的全部信息。
【解决方案2】:

该错误是由于缺少一些可以通过包含导入的导入引起的

import java.awt.event.ActionListener; import java.awt.event.ActionEvent;

我认为有一些 IDE 可以帮助并在您输入类时自动导入它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2016-08-23
    • 2013-12-28
    • 2013-02-16
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多