运行程序片,通过人机交互的过程,熟悉一些基本的事件机制
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);
}
}
//基础知识:在匿名内部类中不能声明静态变量
/**--注意--**/
以上代码都是在文本编辑器中写的,可能会有些许纰漏