运行程序片,通过人机交互的过程,熟悉一些基本的事件机制

import java.awt.*;

import java.awt.event.*;

import java.applet.*;


class StaticTest{

  //静态全局变量

  static int count=0;

  public StaticTest(){

    ++count;

    System.out.println("count:"+count);

  }

}


public class Test extends Applet{

  private Button btn=new Button("创建");

  private TextField tf=new TextField(10);


  //匿名内部类  

  class Create implements ActionListener{

    public void actionPerformed(ActionEvent e){

      //每次实例化对象时,count的值会一直累加,而不是重新从0开始

      StaticTest st=new StaticTest();

    }  

  }


  @Override

  public void init(){

    add(btn);

    //添加点击事件

    btn.addActionListener(new Create());

    add(tf);

  }


  public static void main(String[] args){

    Test t=new Test();

    Frame frame=new Frame();

    //给窗口添加关闭事件

    frame.addWindowListener(

      new ActionAdapter(){

        public void windowClosing(WindowEvent e){

          System.exit(0);

        }

      }

    );

    frame.add(t,BoderLayout.CENTER);

    frame.setSize(300,200);

    //初始化窗口内控件

    t.init();

    t.start();

    //显示程序片窗口

    frame.setVisible(true);

  }

}


//多线程

import java.awt.*;

import java.awt.event.*;

import java.applet.*;


public class Test extends Applet{

  private Button start=new Button("开始“),

          stop=new Button("停止");

  private TextField tf=new TextField(10);

  private runFlag=true;

  private static int count=0;

  private ThreadTest tt=null;

  //将ThreadTest作为一个匿名内部类

  private ThreadTest extends Thread{

    //在构造ThreadTest示例对象的时候,启动线程

    public ThreadTest(){

      start();

    }

    @Override

    public void run(){

      while(true){

        try{

          Thread.currentThread().sleep(200);

        }catch(InterruptedException e){

          e.printStackTrace();

        }

        if(runFlag){

          tf.setText(Integer.toString(++count));

        }

      }

    }

  }


  class Start implements ActionListener{

    @Override

    public void actionPerformed(ActionEvent e){

      if(tt==null)

        tt=new ThreadTest();

    }

  }


  class Stop implements ActionListener{

     @Override

     public void actionPerformed(ActionEvent e){

        if(tt!=null)

          runFlag=!runFlag;

     }

  }


  @Override

  public void init(){

    add(stop);

    stop.addActionListener(new Stop());

    add(start);

    start.addActionListener(new Start());

    add(tf);

  }


  public static void main(String[] args){

    Frame frame=new Frame("程序片");

    Test t=new Test();

    frame.addWindowListener(

      new WindowAdapter(){

        @Override

        public void windowClosing(WindwoEvent e){

          System.exit(0);

        }

      }

    );

    frame.add(t,BorderLayout.CENTER);

    frame.setSize(300,200);

    t.init();

    t.start();

    frame.setVisible(true);

  }

}


//在主类中合并线程

要将线程与主类合并,必须实现Runnable接口,重写run()方法,但这与从Thread继承的类还是有很大的差别。若要开启一个新的线程,只需将主类作为一个参数传入即可(类型上溯(Runnable))

import java.awt.*;

import java.awt.event.*;

import java.applet.*;


//实现Runnable接口

public class Test extends Applet implements Runnable{


  private Button start=new Button("Start"),

          stop=new Button("Stop");

  private TextField tf=new TextField(10);

  private Thread th=null;

  private boolean runFlag=true;

  private static int count=0;


  //重写run方法

  @Override

  public void run(){

    while(true){

      try{

        th.sleep(200);

      }catch(InterruptedException e){

        e.printStackTrace();

      }

      if(runFlag)

        tf.setText(Integer.toString(++count));

    }

  }


  class Start implements ActionListener{

    @Override

    public void actionPerformed(ActionEvent e){

      if(th==null){

        //传入当前上下文对象,即上溯类型Runnable(因为实现了此接口)

        th=new Thread(Test.this);

        th.start();

      }

    }

  }


  class Stop implements ActionListener{

    @Override

    public void actionPerformed(ActionEvent e){

      runFlag=!runFlag;

    }

  }


  @Override

  public void init(){

    add(start);

    start.addActionListener(new Start());

    add(stop);

    stop.addActionListener(new Stop());

    add(tf);

  }


  public static void main(String[] args){

    Frame frame=new Frame("程序片");

    Test t=new Test();

    frame.add(t,BorderLayout.CENTER);

    frame.addWindowListener(

       new WindowAdapter(){

         @Override

          public void windowClosing(WindwoEvent e){

            System.exit(0);

          }

        }

    );

    frame.setSize(300,200);

    t.init();

    t.start();

    frame.setVisible(true);

  }

}


//基础知识:在匿名内部类中不能声明静态变量



/**--注意--**/

以上代码都是在文本编辑器中写的,可能会有些许纰漏