是在父类建立3个button的actionperformed函数,然后再在不同的子类中重载吗?父类函数该是protected or public的吧?

解决方案 »

  1.   

    子类有很多 ,但窗体的形式一样,只是响应不一样!所以3个button在父类!
      

  2.   

    你可以去google一下模板方法模式。
      

  3.   

    我想了一个变通的方式,把所有的添加事件处理的代码封装到一个方法里,子类覆盖这个方法,写了个例子。
    我是新手,可能有些乱,仅供参考。
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    public class Main {
        public static void main(String[] args) {
           new Sub("SubFrame");
        }
    }class Super extends JFrame {
        private JButton button1;
        private JButton button2;
        private JButton button3;
        public Super(String title){
            super(title);
            button1=new JButton("button1");
            button2=new JButton("button2");
            button3=new JButton("button3");
            getContentPane().setLayout(new BorderLayout());
            getContentPane().add(button1,BorderLayout.NORTH);
            getContentPane().add(button2,BorderLayout.CENTER);
            getContentPane().add(button3,BorderLayout.SOUTH);
            addActionProcessing();
            setSize(400,400);
            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public JButton getButton1(){
            return button1;
        }
        public JButton getButton2(){
            return button2;
        }
        public JButton getButton3(){
            return button3;
        }
        public void addActionProcessing(){
            button1.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e) {
                    System.out.println("I'm button1 ");
                }
                
            });
            button2.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e) {
                    System.out.println("I'm button2 ");
                }
                
            });
            button3.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e) {
                    System.out.println("I'm button3 ");
                }
                
            });
        }
    }class Sub extends Super{    public Sub(String title){
            super(title);
        }
        @Override
        public void addActionProcessing() {
           getButton1().addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {
                    System.out.println("Sub Frame Processing Button1");
                }
            });
            getButton2().addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {
                    System.out.println("Sub Frame Processing Button2");
                }
            });
             getButton3().addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {
                    System.out.println("Sub Frame Processing Button3");
                }
            });
        }
        
    }你只要在子类中自己重写public void addActionProcessing()这个方法就可以了。