2015-10-14 30 views
0

我在我的计算机科学类中有一个练习,我正在学习在Java小程序中使用Action侦听器。虽然我有点困惑,可以做一些帮助!这里是我必须执行的练习:在不同的类中使用ActionListener

“为三个按钮提供一个按钮处理程序类。构造函数应该将其作为其参数作为参数引用该applet并为该尺寸指定一个合适的整数值。add addActionListener calls到init方法(即每个应该创建一个专用于特定按钮的新处理程序对象)。编译并运行你的applet。“

我创建了一个按钮处理程序类,并创建了构造函数(我认为我做的正确)。我的主要问题是“add addActionListener调用init方法”部分。

这里是ButtonHandler类我创建:

 class ButtonHandler implements ActionListener { 

     Square theApplet; 

     ButtonHandler(Square app){ 
      theApplet = app; 
     } 
} 

之后,我试图在该buttonhandler还打电话叫init方法添加的addActionListener方法。

 butSmall.addActionListener(ButtonHandler()); 

但是,这给了我错误。任何人都可以解释如何完成这个练习?谢谢。

回答

1

我创建了一个按钮处理程序类,并创建了构造函数(我认为我做的正确)。

嗯不,你没有做得对。类声明它实现了ActionListener,但它实际上并没有为ActionListener.actionPerformed(ActionEvent)提供实现。如果它是abstract,它可以逃脱,但事实并非如此。 (如果它抽象的,那么你将无法进行实例化。)

我对此表示怀疑之后。你提出的课程不会编译,所以你没有通过那个课。

我试图在buttonhandler必须调用的init方法中添加addActionListener。

butSmall.addActionListener(ButtonHandler()); 

但是这给了我错误。

指定您收到的错误以及它们来自何处(即来自编译器,本例中)将是您的优势。如果编译器甚至到了试图分析那一行的地步,它可能会抱怨你试图调用的构造函数不存在。您提交的一个构造函数需要Square类型的参数,但您试图调用不带任何参数的构造函数。

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

如果你正试图从一个Squareinit()方法中调用该构造函数,你想传递给Squareinit()方法的引用进行调用,那么您可以使用关键字this作为论据。然而,再次,甚至在你可以达到那一点之前,你需要修复ButtonHandler

0

只需创建一个类实现ActionListener,具体为actionPerformed(ActionEvent)函数。如果您需要指定参数,请使用您希望的参数创建一个自定义构造函数。此外,您的ButtonHandler类不是静态的,因此您需要使用新的进行初始化。

检查我下面的例子:

它的一个侦听器需要一个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));

0

如果你看看ActionListener接口的JavaDoc,你会发现它需要你实现一个方法void actionPerformed(ActionEvent e)。您的自定义ButtonHandler尚未实现该方法,因此它不满足ActionListener界面提供的合同。

添加块这样的:

@Override 
public void actionPerformed(ActionEvent e) { 
    //Do something here 
} 

上您的课。

请注意,在大多数情况下,按钮的单击侦听器等小ActionListener实现为匿名函数。关于如何编写ActionListeners有一个不错的"official" tutorial,请务必阅读!

要真正实例化您的ButtonHandler的新实例,您需要Java关键字new,如new ButtonHandler()

相关问题