在另一个类

时间:2015-10-14 17:22:56

标签: java swing applet

我在我的计算机科学课上练习,我正在学习在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());

但这给了我错误。有谁可以解释如何完成这个练习?谢谢。

3 个答案:

答案 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()