我在我的计算机科学课上练习,我正在学习在Java Applets中使用Action监听器。虽然我有点困惑,可以帮忙!这是我必须进行的练习:
“为三个按钮提供单个按钮处理程序类。构造函数应该将对applet的引用和大小的适当整数值作为其参数。将addActionListener调用添加到init方法(即每个应该创建一个新的处理器对象专用于特定按钮)。编译并运行你的applet。“
我创建了一个按钮处理程序类并创建了构造函数(我想我已经正确完成了)。我的主要问题是“将addActionListener调用添加到init方法”部分。
这是我创建的ButtonHandler类:
class ButtonHandler implements ActionListener {
Square theApplet;
ButtonHandler(Square app){
theApplet = app;
}
}
之后我尝试在按钮处理程序必须调用的init方法中添加addActionListener。
butSmall.addActionListener(ButtonHandler());
但这给了我错误。有谁可以解释如何完成这个练习?谢谢。
答案 0 :(得分:1)
我创建了一个按钮处理程序类并创建了构造函数(我认为我已经正确完成了)。
唔不,你还没有正确地完成它。类声明它实现了> z=3
> grep( paste0("bin",(z-1):z, collapse="|") , x)
[1] 2 3
> x[ grep( paste0("bin",(z-1):z, collapse="|") , x)]
[1] "bin2" "bin3"
> z=1
> x[ grep( paste0("bin",(z-1):z, collapse="|") , x)]
[1] "bin1"
,但它实际上并没有为ActionListener
提供实现。如果它是ActionListener.actionPerformed(ActionEvent)
,它可以逃脱,但事实并非如此。 (如果它是抽象,那么你将无法实例化它。)
之后
我对此表示怀疑。你提出的课程不会编译,所以你没有超过那个课程。
我试图在init方法中添加一个addActionListener buttonhandler必须调用。
abstract
但这给了我错误。
指定您收到的错误以及它们来自哪里(即在这种情况下来自编译器)将是您的优势。如果编译器甚至试图分析该行,则可能会抱怨您尝试调用的 butSmall.addActionListener(ButtonHandler());
构造函数不存在。您提供的一个构造函数需要类型为ButtonHandler
的参数,但您尝试调用不带参数的构造函数。
任何可以解释如何完成的人 这个练习?
如果您尝试从Square
的{{1}}方法中调用该构造函数,并且希望传递对其init()
方法为Square
的{{1}}的引用执行调用,然后您可以使用关键字Square
作为参数。但是,在您甚至可以达到这一点之前,您需要修复init()
。
答案 1 :(得分:0)
只需创建一个实现 ActionListener 的类,特别是actionPerformed(ActionEvent)
函数。如果需要指定参数,请使用所需参数创建自定义构造函数。此外,您的ButtonHandler类不是静态的,因此您需要使用 new 对其进行初始化。
检查下面的示例:
它是一个侦听器,它将JPanel和A 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));
答案 2 :(得分:0)
如果查看ActionListener接口的JavaDoc,您会发现它需要您实现方法void actionPerformed(ActionEvent e)
。您的自定义ButtonHandler
尚未实施该方法,因此它不会填写ActionListener
界面提供的合同。
像这样添加一个块:
@Override
public void actionPerformed(ActionEvent e) {
//Do something here
}
到你的班级。
请注意,在大多数情况下,像Button的单击侦听器这样的小ActionListener实现为匿名函数。关于如何编写ActionListeners有一个很好的"official" tutorial,请务必阅读它!
要实现实例化ButtonHandler
的新实例,您需要new
之类的Java关键字new ButtonHandler()
。