首页 文章

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

提问于
浏览
1

如果我有类A扩展JButton并实现ActionListener并执行某个默认操作 . 然后我有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 回答

  • 2

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

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

    我希望它做同样的动作,再加上别的东西 .

    您可以在相同的 JButton 上添加多个 ActionListener ,并且在单击按钮时将触发所有 ActionListener 但是确保侦听器的顺序不是预定义的,也不应该是预定义的 .

    除非您需要覆盖现有功能,否则切勿扩展任何内置类 .

    了解更多关于Favor Composition over inheritance Principle


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

    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
        }
    }
    
  • 0

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

相关问题