//你的程序有问题,请坐如下改动
import java.awt.*;
import java.net.*;
import java.applet.*;
import java.awt.event.*;public class Applet1 extends Applet implements ActionListener
//                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
{
    Button btn;
    public void init(){
        btn = new Button ("确定");
        add(btn);
        btn.addActionListener (this);
    //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        
    }
    public void actionPerformed(ActionEvent evt)
    {
        if(evt.getSource()==btn)
        btn.setEnabled (false);
    }
}    

解决方案 »

  1.   

    btn = new Button ("确定");
    btn.addActionListener(this);<---------------添上这句试试
            add(btn);
      

  2.   

    你的错误在于你将JDK1.0中采用的事件模型与JDK1.1+采用的事件模型混在一起了。如果要采用JDK1.0的事件处理方式,你的程序要改写如下:
    public class Applet1 extends Applet
    {
        Button btn;
        public void init(){
            btn = new Button ("确定");
            add(btn);
        }//public void actionPerformed(ActionEvent evt) ==>
        public boolean action(Event evt, Object arg)
        {
            if(evt.target.equals(btn))
              btn.setEnabled (false);
            else
              return super.action(evt, arg);  // 要考虑缺省处理。
            return true;  // 已自行处理后返回TRUE
        }
    }而如果要采用JDK1.1+的事件处理方式程序要改写如下:
    public class Applet1 extends Applet
    {
        Button btn;
        public void init(){
            btn = new Button ("确定");
    // 给btn增加一个ActionListener,这个实现是用一个内部类,也可以干脆采用匿名类。
            btn.addActionListener(new Btn());        
            add(btn);        
        }// ActionListener 的具体实现
       class Btn implements ActionListener {
        public void actionPerformed(ActionEvent evt)
        {
    // 无需判断事件来源,因为来源我们早就知道了!
              btn.setEnabled (false);
        }
      }
    }
      

  3.   

    抱歉,没有看见楼上的帖子,其实他们说的方法更简单也正确,不过这是一种不推荐的方法。在JDK1.1+中推荐的方法是将事件处理从主类中独立出来,用一个内部类或匿名内部类来实现,这样可以更清晰地将事件与它的处理逻辑与主类从概念上分开。具体的介绍可见《Think in Java》这本书的第13章的说明。