如何将ActionEvent添加到JButton中,以便当我单击它时它将触发事件?

时间:2014-06-04 22:05:53

标签: java swing

我希望能够将ActionListener添加到JButton,但似乎无法让它正常工作。

我试图添加ActionListeneer以及ActionEvent,但似乎都没有激活ActionPerformed方法。

我没有一个奇怪的方面是编译器让我取消@Override关键字,因为接口用于创建变量而未实现。

这会有所不同吗?我确信你可以这样做,但我认为我只是有点偏僻。

代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;

public class testInterfaces2 {
    static ActionListener m;
    static ActionEvent me;

    testInterfaces2() {
    }

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

    public static void main(String[] args) {
         JFrame f = new JFrame("Test");

         f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
               System.exit(0);
            }
         });

         JButton pButton = new JButton("Print");
         pButton.addActionListener(m);
         //pButton.addActionListener(m.actionPerformed(me));

         f.add("Center", pButton);
         f.pack();
         f.setVisible(true);
    }
}

3 个答案:

答案 0 :(得分:3)

应该是这样,并删除不需要的ActionListenerActionEvent变量。

public class testInterfaces2 implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("Mouse Clicked");
    }

    ...
    JButton pButton = new JButton("Print");
    pButton.addActionListener(this); 
}
  1. @Override除了重写方法的编译时检查之外,不会做任何其他事情。

  2. 简单来说,您需要一个实现ActionListener的类,并且显然实现了actionPerformed()方法。只需创建该类的对象并传入addActionListener()方法。

答案 1 :(得分:2)

  

我没有一个奇怪的方面是编译器让我脱掉了   @Override关键字,因为该接口用于创建变量和   没有实施。

这应该突出显示您的第一个问题,您的testInterfaces2类无法覆盖actionPerformed,因为它没有在父类的任何部分或父类中定义。这是因为testInterfaces2没有直接或间接地(通过继承)实现ActionListener

您的第二个问题是mnull,您从未对其进行初始化

仔细查看How to write ActionListeners了解更多详情

答案 2 :(得分:2)

我认为为每个按钮定义一个新的ActionListener是最好的。喜欢这个

JButton pButton = new JButton();

pButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            //throw new UnsupportedOperationException("Not supported yet.");
            System.exit(0);
        }
    });