祝大家节日快乐
这是我要了解的情况的用例。
public abstract class Animal extends JButton implements ActionListener {
private boolean actionFlag = false;
//some constructor
//some functions
@Override
public void actionPerformed(ActionEvent actionEvent) {
this.actionFlag = true;
System.out.println(this.actionFlag);
}
}
public class Tiger extends Animal {}
public class Bear extends Animal {}
例如,当创建
Tiger
和Bear
对象并且它们是BTN的原因时,抽象方法扩展了JButton
类,这些按钮在被按下时将调用它们各自的ActionPerformed()
函数,因为我没有覆盖每个类的actionPerformed
函数都将分别从其父类actionPerformed()
继承Animal
,我相信到目前为止,即使不是随意纠正我,我也是对的。现在,由于所有这些观察结果都是正确的,例如,当我单击熊按钮时,我应该看到输出中的消息等于“ true”。
这就是问题所在,我的控制台上什么也没有出现,并且根本没有触发基类的
actionListener
。(GUI上的按钮是
setEnabled(true)
,因此交互不是问题)可能的原因是什么?我在这里想念什么?
paintComponent()
函数也会发生同样的事情,但是我相信,如果我理解了actionListener
上的错误,那就很简单了。 最佳答案
仅给JButton扩展类提供一个ActionListener并不会将该侦听器添加到创建的按钮中。为此,必须在类的构造函数中使用addActionListener(this);
实际添加侦听器。
public abstract class Animal extends JButton implements ActionListener {
private boolean actionFlag = false;
public Animal() {
addActionListener(this);
}
//some constructor
//some functions
@Override
public void actionPerformed(ActionEvent actionEvent) {
this.actionFlag = true;
System.out.println(this.actionFlag);
}
}
话虽如此,我永远不会有这样的Swing代码。相反,我会
如果可能的话,按组成进行扩展,除非我绝对需要重写现有的JButton方法(并且这需要证明是合理的)
将我的视图类与侦听器分开,即使这意味着要使用匿名内部类。最好不要让视图类实现侦听器接口,因为这违反了“单一职责原则”,并增加了类的复杂性和目的,无济于事
关于:
paintComponent()
也会发生相同的情况此处可能会发生一些不同的事情,因为您不需要向组件“添加” paintComponent,而是如果它是适当的方法替代,则Swing图形系统会自动调用它。
关于java - 在Abstract Class中实现的 Action 监听器不会被扩展它的类继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59471197/