運行程序片,通過人機交互的過程,熟悉一些基本的事件機制
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);
}
}
//基礎知識:在匿名內部類中不能聲明靜態變量
/**--注意--**/
以上代碼都是在文本編輯器中寫的,可能會有些許紕漏