扩展JButton类时如何扩展actionPerformed方法

时间:2014-07-23 08:42:22

标签: java swing jbutton actionlistener extends

如果我有一个扩展JButton并实现ActionListener的A类,它会执行某个默认操作。然后我有B类扩展A类,我希望它做同样的动作,加上其他东西。如何扩展A类的actionPerformed方法?

A类:

class AButton extends JButton implements ActionListener {
    AButton () {
        addActionListener(this);
    }
    @Override
    public void actionPerformed (ActionEvent aEvent) {
        methodA();
    }
}

B组:

class BButton extends AButton {
    BButton () {
        super();
        addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent aEvent) {
               methodB();
           } 
        });
    }
}

3 个答案:

答案 0 :(得分:2)

您可以覆盖methodA()而不是actionPerformed()调用

protected void methodA() {
  super.methodA();
  //additional actions here
}

答案 1 :(得分:1)

  

我希望它能够做同样的动作,加上别的东西。

您可以在同一个ActionListener上添加多个JButton,并且在点击按钮时会触发所有class AButton extends JButton implements ActionListener { AButton () { addActionListener(this); } @Override public void actionPerformed (ActionEvent aEvent) { methodA(); methodB(); } public void methodB(){ // nothing here, no code // you can make this method abstract if needed } } class BButton extends AButton { @Override public void methodB(){ // add more code here specific to this class } } ,但要确保侦听器的顺序不是预定义的,不应该是。

除非您需要覆盖现有功能,否则永远不要扩展任何内置类。

详细了解Favor Composition over inheritance Principle


如果你想以同样的方式做,那么试试这样的事情:

{{1}}

答案 2 :(得分:0)

我认为这是不可能的。您不能继承匿名类。您应该编写一个实现ActionListener的动作处理程序,然后从第二个类的处理程序扩展。