一个接口的问题,前面是正确的程序,后米看是错误的程序。
1. 程序这样写是没问题的(button.addActionListener(this);)
public class t implements ActionListener{
JButton button,button_new;
public static void main (String arg[]){
t gui = new t();
gui.go();
}
private void go() {
JFrame f = new JFrame();
button = new JButton("click me");
button.addActionListener(this);
f.getContentPane().add(button);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300, 300);
f.setVisible(true);
}
public void actionPerformed(ActionEvent arg0) {
button.setText("I've been clicked");
}
}
2. 但我修改一下就有问题了(button.addActionListener((ActionListener) this);)
public class t{
JButton button,button_new;
public static void main (String arg[]){
t gui = new t();
gui.go();
}
private void go() {
JFrame f = new JFrame();
button = new JButton("click me");
button.addActionListener((ActionListener) this);
f.getContentPane().add(button);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300, 300);
f.setVisible(true);
}
public void actionPerformed(ActionEvent arg0) {
button.setText("I've been clicked");
}
}

解决方案 »

  1.   

    addActionListener函数的参数要求是一个ActionListener
    你的前面的程序t implements ActionListener,所以是ActionListener接口的实现,所以可以啊。但是你后面的程序t和ActionListener没关系,你想强制把t转换成ActionListener,应该报Cast Exception吧?
      

  2.   

    public class t{
        JButton button,button_new;
        public static void main (String arg[]){
            t gui = new t();
            gui.go();
        }
        private void go() {
            JFrame f = new JFrame();
            button = new JButton("click me");
            button.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0) {
                   System.out.println(1); 
                }
                   
            });
            f.getContentPane().add(button);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setSize(300, 300);
            f.setVisible(true);
        }
    }
      

  3.   

    public class t {
        JButton button, button_new;
        public static void main(String arg[]) {
            t gui = new t();
            gui.go();
        }
        private void go() {
            JFrame f = new JFrame();
            button = new JButton("click me");
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    button.setText("I've been clicked");
                }
            });
            f.getContentPane().add(button);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setSize(300, 300);
            f.setVisible(true);
        }
    }
      

  4.   

    button.addActionListener((ActionListener) this);你这里的 this 也就是本身这个对象,没有实现 ActionListener 接口,那么当他要强制转换成 ActionListener 当然就会出错了
      

  5.   

    你丢了implements ActionListener
      

  6.   

    源码里是这样的    它需要一个 ActionListener  对象
    public void addActionListener(ActionListener l) {
            listenerList.add(ActionListener.class, l);
    }
    你第一次this  是实现了ActionListener 接口,所以传入this没错 
    完毕
      

  7.   

    this代表的对象是t类的,跟ActionListener没有关系