当前位置: 首页 > 知识库问答 >
问题:

父类中的ActionListener

陆俊迈
2023-03-14

我在一个父类中与Java中的ActionListener作斗争,我尝试了一系列可能的解决方案,但都无法使其工作。这在这里也没有帮助:Java actionlistener在不同的类中执行actionPerformed

问题如下:

父类

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个答案

赏夕
2023-03-14

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

因此,由于ParentClassActionListener,这意味着ChildClass也是。更具体地说,ChildClass继承了ParentClass公共void actionPerformed(ActionEvent e)方法。

因此,将b.AddActionListener(listener);更改为b.AddActionListener(this)。(您还可以删除ChildClassListener字段)

新代码将把“this”ChildClass对象传递给B,然后每当按下按钮时,该对象将调用ActionPerformed(ActionEvent e)。由于任何ChildClass对象都具有ParentClassActionPerformed(ActionEvent),这意味着将调用ParentClass#ActionPerformed(ActionEvent)(按照您的意图)。

 类似资料:
  • 我有java中的类:。和类,它扩展了类。 Class保留Class的实例。 我注意到,当我调用类B的构造函数时(当我在类A中初始化这个参数时),它会执行super(),创建一个新的实例A,并初始化所有It字段。 我如何告诉class

  • 我找到了这个Google标签管理器宏脚本(http://viget.com/advance/gtm#elementclass)标识元素的父元素是否具有特定的类值。 有没有办法修改它以记录值,然后使用规则指定名称?还是有其他方法可以实现这一点?

  • 我正在尝试编写一个代码,它采用车辆名称等并将它们存储在一个对象数组中。我有车辆作为父类,带有一个打印名称、品牌和加仑油箱的toString,父类的两个子类是bus和car。Car和Bus询问有多少门、轮子或乘客。当随机化顺序后打印数组时,我只从父类中获取to Strings以在数组的索引为父类时打印出来。我要打印出来的是:车辆0:名称:汽车品牌:某物:油箱尺寸:15门:4:轮子4 我的代码如下:

  • 我是C语言的新手,正在寻找关于以下问题的建议。我正试图创建一个程序,生成树的形状(是的,真正的树)。这些形状完全由树枝构成。为此,我开始编写一个名为Branch的类。主要的想法是。cpp I创建一个类Branch的实例,它本身将创建Branch的实例。这适用于迭代。 目前,该计划的结构如下: main.cpp: 树枝h: 树枝cpp: 现在,这个程序可以工作,但是我想通过将每个对象存储在一个向量中

  • 我有一个主类。应用程序中有许多子类是从类扩展而来的。base类公开公共方法,如下所示: 应用程序将在子实例上调用以获得一个检查器实例。每个子类都可以有自定义的基本检查器和验证检查器。他们可以使用和方法实现它,但是他们不能覆盖基类的,因为它包含处理逻辑。 在这里使用关键字合适吗?

  • 我正在用Lombok插件做一个Spring项目。我添加了注释,并使父类的字段最终初始化,使用@AllArgsConstructor或@必需ArgsConstructor而不是字段注入(使用类字段的@autowed)。但是,由于某种原因,子类DraftsPostmethod报告了一条消息,即在父类AbstractFuntoryServicemethod中没有找到默认构造函数 我不确定是什么导致了它,