我在父类中使用Java中的ActionListener进行了挣扎,我尝试了一些可能的解决方案,但无法使其工作。这也没有帮助: Java actionlistener actionPerformed in different class
问题如下:
Class2 扩展 Class1,我在Class2中有一个按钮。按下Class2中的按钮后,应通过动作监听器通知Class1并执行该事件。
我努力让Class1知道事件已经发生。对我来说这看起来很简单,但我仍然在挣扎。
你的帮助会很有用,谢谢你!
父类
package test;
//imports removed for better visibility
public class ParentClass extends JPanel implements ActionListener{
JFrame frame;
public void createParentGui() {
frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel mainCard = new JPanel(new CardLayout(20, 20));
ChildClass card1 = new ChildClass();
mainCard.add(card1);
frame.add(mainCard, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("Button pressed, action!");
}
}
儿童班
package test;
//imports removed for better visibility
public class ChildClass extends ParentClass {
ActionListener listener = null; //this is probably not right, how to do
//with a local variable when passing it to the parent class?
public Child() {
createGui();
}
private void createGui() {
final JButton b = new JButton("press me");
b.addActionListener(listener);
add(b);
}
}
答案 0 :(得分:0)
ChildClass
包含ParentClass
所做的所有字段和方法(除了它自己的唯一字段和方法)。这就是继承的工作原理。
因此,由于ParentClass
是ActionListener
,这意味着ChildClass
也是ChildClass
。更具体地说,public void actionPerformed(ActionEvent e)
继承 ParentClass
的{{1}}方法。
因此,请将b.addActionListener(listener);
更改为b.addActionListener(this)
。 (您还可以删除listener
的{{1}}字段)
新代码会将“this”ChildClass
对象传递给ChildClass
,然后只要按下按钮,就会调用b
。由于任何actionPerformed(ActionEvent e)
对象都有ChildClass
actionPerformed(ActionEvent e)
,这意味着ParentClass
将被调用(如您所愿)。