“AbstractButton 类型中的方法 addActionListener(ActionListener) 不适用于参数”错误
Posted
技术标签:
【中文标题】“AbstractButton 类型中的方法 addActionListener(ActionListener) 不适用于参数”错误【英文标题】:"The method addActionListener(ActionListener) in the type AbstractButton is not applicable for the arguments" error 【发布时间】:2020-06-28 19:57:35 【问题描述】:我想创建一个JFrame
,它会在控制台上打印出来:“它有效!!”当您单击JButton
时。下面是代码:
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
public class CurrentlyMajorCodesCompiler extends JFrame
public static void main (String args[])
CurrentlyMajorCodes CMC = new CurrentlyMajorCodes();
CMC.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
public class CurrentlyMajorCodes extends JFrame
private JButton ClickSpeedTest;
private tensCPS TCPS;
public CurrentlyMajorCodes ()
super("Major Code Compiler");
setLayout(new FlowLayout());
ClickSpeedTest = new JButton("Click Speed Test");
add(ClickSpeedTest);
ClickSpeedTest.addActionListener(new MouseAdapter ()
public void mouseClicked (MouseEvent event)
System.out.println("It works!!");
);
setSize(250, 250);
setVisible(true);
但是,在:ClickSpeedTest.addActionListener
,它给了我一个错误提示:
The method addActionListener(ActionListener) in the type
AbstractButton is not applicable for
the arguments (new MouseAdapter())`
我不明白它试图传达什么,因为我从未在代码中使用过AbstractButton
,甚至不知道它是什么。有人可以帮忙吗?
【问题讨论】:
JButton 扩展了 AbstractButton,它有 addActionListener 方法。 【参考方案1】:MouseListener 与 ActionListener 不同。你需要使用后面的
ClickSpeedTest.addActionListener(new ActionListener ()
public void actionPerformed (ActionEvent event)
System.out.println("It works!!");
);
【讨论】:
有什么区别? MouseListener 封装了鼠标引起的所有事情(移动、拖动、单击、进入、退出)。 ActionListener 用于单击按钮,但也用于从键盘或其他输入启动操作【参考方案2】:AbstractButton
类中的方法addActionListener() 采用单个参数,即实现接口ActionListener 的类的实例。 JButton
类扩展了 AbstractButton
,因此继承了此方法。
现在查看MouseAdapter 类。您会看到它没有实现接口 ActionListener
,因此不适合作为方法 addActionListener()
的参数。
对于您问题中描述的要求,我建议您创建自己的接口ActionListener
实现。下面和你贴的代码类似,使用匿名内部类实现接口ActionListener
:
ClickSpeedTest.addActionListener(new ActionListener()
public void actionPerformed(java.awt.event.ActionEvent event)
System.out.println("It works!!");
);
请注意,只要按钮ClickSpeedTest
被激活,无论是通过鼠标还是键盘,甚至是通过Java 代码,都会调用上述actionPerformed()
方法。 (参考AbstractButton
类中的方法doClick()。)
如果您使用的是 Java 8 或更高版本,那么ActionListener
是一个functional interface,即一个只包含一个抽象方法的接口,因此您可以使用lambda expression 来实现它,这意味着您也可以使用以下代码:
ClickSpeedTest.addActionListener(e -> System.out.println("It works!!"));
【讨论】:
以上是关于“AbstractButton 类型中的方法 addActionListener(ActionListener) 不适用于参数”错误的主要内容,如果未能解决你的问题,请参考以下文章