繁体   English   中英

在其他类中使用ActionListener

[英]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类型的参数,但是您试图调用一个不带参数的构造函数。

任何人都可以解释如何完成此练习?

如果您试图从Squareinit()方法中调用该构造函数,并且希望将引用传递给其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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM