我希望能够将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);
}
}
答案 0 :(得分:3)
应该是这样,并删除不需要的ActionListener
和ActionEvent
变量。
public class testInterfaces2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Mouse Clicked");
}
...
JButton pButton = new JButton("Print");
pButton.addActionListener(this);
}
@Override
除了重写方法的编译时检查之外,不会做任何其他事情。
简单来说,您需要一个实现ActionListener
的类,并且显然实现了actionPerformed()
方法。只需创建该类的对象并传入addActionListener()
方法。
答案 1 :(得分:2)
我没有一个奇怪的方面是编译器让我脱掉了 @Override关键字,因为该接口用于创建变量和 没有实施。
这应该突出显示您的第一个问题,您的testInterfaces2
类无法覆盖actionPerformed
,因为它没有在父类的任何部分或父类中定义。这是因为testInterfaces2
没有直接或间接地(通过继承)实现ActionListener
。
您的第二个问题是m
是null
,您从未对其进行初始化
仔细查看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);
}
});