[英]Using ActionListener in a different class
我在计算机科学课上有一个练习,我正在学习在Java Applets中使用Action侦听器。 虽然我有些困惑,但可以提供一些帮助! 这是我必须执行的练习:
“为三个按钮提供一个按钮处理程序类。构造函数应将对applet的引用和大小的适当整数值作为其参数。将addActionListener调用添加到init方法(即,每个调用都应创建一个专用的新处理程序对象到特定按钮)。编译并运行小程序。”
iv创建了一个按钮处理程序类并创建了构造函数(我认为我做对了)。 我的主要问题是“将addActionListener调用添加到init方法”部分。
这是我创建的ButtonHandler类:
class ButtonHandler implements ActionListener {
Square theApplet;
ButtonHandler(Square app){
theApplet = app;
}
}
之后,我尝试在按钮处理程序必须调用的init方法中添加addActionListener。
butSmall.addActionListener(ButtonHandler());
但这给了我错误。 任何人都可以解释如何完成此练习? 谢谢。
iv创建了一个按钮处理程序类并创建了构造函数(我认为我做对了)。
好吧,您没有正确执行操作。 该类声明已实现ActionListener
,但实际上并未提供ActionListener.actionPerformed(ActionEvent)
。 如果它是abstract
,则abstract
,但事实并非如此。 (如果它是抽象的,那么您将无法实例化它。)
之后
我对此表示怀疑。 您提供的课程不会编译,因此您在该课程上没有走过那一步。
我试图在按钮处理程序必须调用的init方法中添加addActionListener。
butSmall.addActionListener(ButtonHandler());
但这给了我错误。
指定收到的错误以及错误的来源(在这种情况下,即来自编译器),这对您有好处。 如果编译器甚至到达尝试分析该行的地步,它可能会抱怨您尝试调用的ButtonHandler
构造函数不存在。 您提出的一个构造函数需要一个Square
类型的参数,但是您试图调用一个不带参数的构造函数。
任何人都可以解释如何完成此练习?
如果您试图从Square
的init()
方法中调用该构造函数,并且希望将引用传递给其init()
方法正在执行调用的Square
,则可以使用关键字this
作为参数。 同样,但是,在达到这一点之前,您需要修复ButtonHandler
。
只需创建一个实现ActionListener的类,尤其是actionPerformed(ActionEvent)
函数。 如果需要指定参数,请使用所需的参数创建一个自定义构造函数。 另外,您的ButtonHandler类不是静态的,因此您需要使用new对其进行初始化。
在下面查看我的示例:
它是一个侦听器,它将JPanel和JFrame作为参数,并将JPanel添加到JFrame作为其内容窗格:
public class OpenScreenListener implements ActionListener {
private JPanel panel;
private JFrame window;
@Override
public void actionPerformed(ActionEvent e) {
window.setContentPane(panel);
window.setVisible(true);
}
public OpenScreenListener(JPanel panel, JFrame window){
this.screen = panel
this.window = window;
}
}
这就是我将其添加到按钮的方式:
myButton.addActionListener(new OpenScreenListener(new JPanel("myJPanel"), myJframe));
如果查看ActionListener接口的JavaDoc,您会发现它要求您实现一个方法void actionPerformed(ActionEvent e)
。 您的自定义ButtonHandler
尚未实现该方法,然后才无法完全满足ActionListener
接口提供的约定。
添加如下所示的块:
@Override
public void actionPerformed(ActionEvent e) {
//Do something here
}
上你的课。
请注意,在大多数情况下,像Button的单击侦听器之类的小型ActionListener是作为匿名函数实现的。 关于如何编写ActionListeners,有一个不错的“官方”教程 ,请务必阅读!
要实例化ButtonHandler
的新实例,您需要Java关键字new
例如new ButtonHandler()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.