父类

时间:2016-12-28 15:04:16

标签: java actionlistener parent

我在父类中使用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);
}
}

1 个答案:

答案 0 :(得分:0)

ChildClass包含ParentClass所做的所有字段和方法(除了它自己的唯一字段和方法)。这就是继承的工作原理。

因此,由于ParentClassActionListener,这意味着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将被调用(如您所愿)。