首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionListener原理

ActionListener原理
EN

Stack Overflow用户
提问于 2015-03-08 16:00:34
回答 1查看 150关注 0票数 0

我试图找到向JButton或其他组件添加操作的基本原则。这是我在做什么,我得到了什么。

我创建了一个名为: Ali的类,其中包含一个main方法,在main方法中实例化了另一个名为:MainFrame的方法,以及我在这里放置的任何组件。

我在这里创建了一个简单的按钮,用ActionListener接口注册了它,并为此编写了一个actionPerformed()方法。很简单很容易。但是不知怎么的这个程序给了我一个错误。这是简化的代码和错误。

代码语言:javascript
复制
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Ali{

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                JFrame frame = new MainFrameAli2("MainFrameAli2");
                frame.setSize(400,600);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setVisible(true);
            }
        });
    }
}

下面是MainFrameAli2

代码语言:javascript
复制
public class MainFrameAli2 extends JFrame implements ActionListener {

    public MainFrameAli2(String title){
        super(title);

        // set layout manager
        setLayout(new BorderLayout());

        // create swing component
        JTextArea textArea = new JTextArea();
        JButton button = new JButton("click");

        // add swing components to content pane
        Container c  = getContentPane();
        c.add(textArea, BorderLayout.NORTH);
        c.add(button, BorderLayout.SOUTH);

        // add behavior
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {
                System.out.println("Clicked");
            }
            });
    }
}

现在的问题是代码没有运行,下面是错误:

代码语言:javascript
复制
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems: 
    The public type MainFrameAli2 must be defined in its own file
    The type MainFrameAli2 must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent)

而且,如果我像下面这样编写代码,一切都正常。

代码语言:javascript
复制
        // add behavior
    button.addActionListener(this);
}

public void actionPerformed(ActionEvent e)  {
    System.out.println("hooyt");
}
}

为什么它在第一种情况下不起作用,而在第二种情况下起作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-08 16:05:17

那么,为什么它不工作在第一种情况下,在第二种情况下工作。

正如编译器消息所述,在第一个示例中,您没有在您的ActionListener类中实现MainFrameAli2接口。

您创建了一个实现ActionListener接口的匿名内部类。这与类实现接口不是一回事。

在第二个示例中,类确实实现了ActionListener。

如果您可以完成第一个示例:

代码语言:javascript
复制
//public class MainFrameAli2 extends JFrame implements ActionListener {
public class MainFrameAli2 extends JFrame {
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28928564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档