Java addActionListener错误

Java addActionListener错误,java,swing,events,actionlistener,Java,Swing,Events,Actionlistener,我用Java制作了一个按钮ActionListener d1.addActionListener(this); 在“这个”上给了我一个错误,但是 工作。为什么我需要添加“(ActionListener)”?我在教程中看到,第一个应该有效;为什么不适合我呢?很简单,这不是一个ActionListener。您的类实现了ActionListener接口吗?编译器告诉你它没有 i、 例如,这将起作用: public class Foo implements ActionListener {

我用Java制作了一个按钮ActionListener

d1.addActionListener(this);
在“这个”上给了我一个错误,但是


工作。为什么我需要添加“(ActionListener)”?我在教程中看到,第一个应该有效;为什么不适合我呢?

很简单,
这不是一个ActionListener。您的类实现了ActionListener接口吗?编译器告诉你它没有

i、 例如,这将起作用:

public class Foo implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
       //....
    }

}
但这不会

public class Bar {

}
这意味着当前类将处理
d1
组件上的任何动作事件。“句柄”是指实现ActionListener类

public class YourClass implements ActionListener {
    // Member variables
    public YourClass() {
        d1.addActionListener(this);
    }

    // Methods

    @Override
    public void actionPerformed(ActionEvent e) {
        // Handle event
    }
}
您可以通过另一种方式处理此问题,方法是创建一个内部单独的类:

public class YourClass implements ActionListener {
    // Member variables
    public YourClass() {
        d1.addActionListener(new CustomActionListener());
    }

    // Methods
    class CustomActionListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // Handle event
        }
    }
}

当我实现ActionListener时,它给了我一个错误“类型按钮Prototype必须实现继承的抽象方法ActionListener.actionPerformed(ActionEvent)”为什么?Ivy:you类没有
actionPerformed
方法,如上所示。实现接口的类必须具有接口指定的所有方法。嗯,第二种语法对我来说也没有意义。我还以为第二种方法也会导致编译器错误。它实际上编译正常,但会出现运行时异常。每天学点东西:)仍然想知道为什么编译器不把它当作错误来处理?
public class YourClass implements ActionListener {
    // Member variables
    public YourClass() {
        d1.addActionListener(this);
    }

    // Methods

    @Override
    public void actionPerformed(ActionEvent e) {
        // Handle event
    }
}
public class YourClass implements ActionListener {
    // Member variables
    public YourClass() {
        d1.addActionListener(new CustomActionListener());
    }

    // Methods
    class CustomActionListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // Handle event
        }
    }
}