addActionListener争论不正确

时间:2016-04-12 18:34:23

标签: java

在程序中我想使用actionListener来监控TextFrame。我创建了一个名为monitor的类,并且有一个构造函数可以调用整个TextFieldFrame,TFFrame。

class Monitor implements ActionListener{

TFFrame tf = null;

public void Monitor(TFFrame tf){
    this.tf = tf;
}

在TFFrame类中,我添加了一个调用自身的actionListener。

class TFFrame extends Frame{
TextField num1, num2, num3;
public void launchFrame(){
    num1 = new TextField(10);
    num2 = new TextField(10);
    num3 = new TextField(20);

    Label plus = new Label("+");
    Button equal = new Button("=");

    equal.addActionListener(new Monitor(this));

然而,编译器是错误的,并且监视器中的错误是不正确的。有什么问题?

1 个答案:

答案 0 :(得分:0)

ActionListener是一个接口,只有一个必需的方法:

actionPerformed(ActionEvent e)

你似乎没有在这里实际实现过这种方法。通常情况下,当发生适当的事件时,它会在引擎盖下被调用。

我认为您可能没有正确使用事件和侦听器。从逻辑上讲,根据我从示例代码中理解的内容,您可以使用以下内容:

TFFrame tf = new TFFrame();

tf.addActionListener( new Monitor() );

一个问题是框架具有它自己的一组事件,并且不会通过点击按钮或通过框架向听众聚焦文本字段来传达事件。框架的事件将最终调用您应该在Monitor中的actionPerformed方法。

您当然可以将其他内容添加到自定义侦听器中,但侦听器通常不会包含对其侦听的内容的引用。也许你真正想要的只是一个动作助手来检查何时按下等号按钮,在这种情况下你会有这样的事情。

TFFrame tf = new TFFrame();

tf.launchFrame();

在launchFrame方法的内部,你可以为equals按钮添加一个动作监听器,并带有某种按钮监听器。

equals.addActionListener( new ButtonListener() );

现在为了工作,您必须创建一个名为按钮侦听器的类来实现动作侦听器,然后在其内部的actionPerformed方法中编写相应的事件处理代码。

P.S。 说实话,这很有道理。如果我对你想要的东西不对,那么我建议你去阅读:https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html