// 程序J04_FrameThread.java: 事件处理机制 
//<HTML> 
//<TITLE> 网页文件:J0_FrameThread.html </TITLE> 
//<Applet code="J04_FrameThread.class"height=200 width=300> 
//</Applet> 
//</HTML> 
import javax.swing.*; //插入javax.swing包 
import java.awt.*; //插入java.awt包 
import java.awt.event.*; //插入java.awt.event包 
//下面代码创建JPanel面板 
class MyComponent extends JApplet 

JPanel panelObj; 
FlowLayout layoutObj; JLabel label1; 
JTextField textf1; //文本框 
JLabel label2; 
JTextField textf2; //文本框 
JLabel label3; 
JTextField textf3; //文本框 
JButton button1; 
JButton button2; 
    public MyComponent() 
    { 
panelObj=new JPanel(); 
getContentPane().add(panelObj); 
layoutObj=new FlowLayout(FlowLayout.CENTER,15,5) ; 
panelObj.setLayout(layoutObj); label1=new JLabel("输出数字 1-26 :"); 
textf1=new JTextField(8); 
label2=new JLabel("输出字母  A-Z :"); 
textf2=new JTextField(8); 
label3=new JLabel("输出数字和字母:"); 
textf3=new JTextField(8); 
button1=new JButton("开始线程"); 
button2=new JButton("停止线程"); 
button2.setEnabled(false); //不使能,默认使能 
panelObj.add(label1); 
panelObj.add(textf1); 
panelObj.add(label2); 
panelObj.add(textf2); 
panelObj.add(label3); 
panelObj.add(textf3); 
panelObj.add(button1); 
panelObj.add(button2); 

} //下面代码创建事件类EventTest,为按钮添加事件 
public class J04_FrameThread extends MyComponent 

ButtonEvent bEObj; 
public void init() 

bEObj=new ButtonEvent(); //创建事件类对象 
button1.addActionListener(bEObj); //注册监听器 
button2.addActionListener(bEObj); //注册监听器 

//下面为一个内部类,编写线程2代码 
class subThread1 extends Thread //线程1 

public void run() //重写run()方法,输出1~26 

for(int i=1;i<=26;i++) 

textf1.setText(Integer.toString(i)); 
textf3.setText(Integer.toString(i)); 
try 

sleep(1000); 

catch(InterruptedException e){} 
if(thread1==null) 
break; 



//下面为一个内部类,编写线程2代码 
class subThread2 extends Thread 

public void run() //重写run()方法,输出A~Z 

for(char ch='A';ch<='Z';ch++) 

textf2.setText(Character.toString(ch)); 
textf3.setText(Character.toString(ch)); 
try 

sleep(1000); 

catch(InterruptedException e){} 
if(thread2==null) 
break; 



//下面为一个内部类,编写按钮事件处理代码 
subThread1 thread1; 
subThread2 thread2; 
class ButtonEvent implements ActionListener 

public void actionPerformed(ActionEvent e) 

Object obj=e.getSource(); 
if(obj==button1) 

getAppletContext().showStatus("线程正在运行!"); 
button2.setEnabled(true); 
button1.setEnabled(false); 
if(thread1==null) 

thread1=new subThread1(); 
thread1.start(); 

if(thread2==null) 

thread2=new subThread2(); 
thread2.start(); 


if(obj==button2) 

getAppletContext().showStatus("线程结束运行!"); 
if(thread1.isAlive()) 

thread1=null; 

if(thread2.isAlive()) 

thread2=null; 

button2.setEnabled(false); 
button1.setEnabled(true); 




  
帮忙看看这个代码有问题没?编译能通过,但用appletviewer运行时没反映,看不见主界面 MyComponent类对象是在什么时候构造的?组建对象什么时候被构造的?好象这个代码上没有啊 
这个是《java语言编程基础教程》第11章上一个例子,感觉有问题

解决方案 »

  1.   

    例子测试了下没问题 ,可偶写的就有问题了
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;//组件和布局
    class MyComponent extends JApplet
    {
    JPanel panelObj;
    FlowLayout layoutObj;
    JLabel label1;
    JTextField textf1;
    JLabel label2;
    JTextField textf2;
    JLabel label3;
    JTextField textf3;
    JButton button1;
    JButton button2;
    public MyComponent()
    {
     panelObj=new JPanel();
     getContentPane().add(panelObj);
     layoutObj=new FlowLayout(FlowLayout.CENTER,15,10);
     label1=new JLabel("输出数字1~26:");
     textf1=new JTextField(8); 
     label2=new JLabel("输出字母A~Z:");
     textf2=new JTextField(8);
     label3=new JLabel("输出数字和字母:");
     textf3=new JTextField(8);
     button1=new JButton("开始线程");
     button2=new JButton("停止线程");
     button2.setEnabled(true);
     panelObj.add(label1);
     panelObj.add(textf1);
     panelObj.add(label2);
     panelObj.add(textf2);
     panelObj.add(label3);
     panelObj.add(textf3);
     panelObj.add(button1);
     panelObj.add(button2);
    }
    }//事件类 
    public class TT extends MyComponent
    {
       ButtonEvent bEObj;
       public void init()
       {
         bEObj=new ButtonEvent();//按钮事件对象
         button1.addActionListener(bEObj);//为组件注册监听器
         button2.addActionListener(bEObj);
      }//内部类
      class subThread1 extends Thread  //线程1
      {
        public void run() //重写run()
        {
         for(int i=1;i<=26;i++)
         {
          textf1.setText(Integer.toString(i));
          textf3.setText(Integer.toString(i));
          try
          {
            sleep(1000);
          }
          catch(InterruptedException e){ }
          if(thread1==null)
              break;      
        }
        }
      }
      
    //内部类
    class subThread2 extends Thread //线程2
    {
      public void run()
      {
         for(char ch='A';ch<='Z';ch++)
         {
           textf2.setText(Character.toString(ch));      
           textf3.setText(Character.toString(ch));
           try
           {
            sleep(1000);
          }
          catch(InterruptedException e){ }
          if(thread2==null)
           break;      
        }
      }
    }  subThread1 thread1;
    subThread2 thread2;
      
      class ButtonEvent implements ActionListener
      {
       public void actionPerformed(ActionEvent e)
       {
       Object obj=e.getSource();//获得当前组件对象
       if(obj==button1)//点开始线程按钮后
       {
         getAppletContext().showStatus("线程正在运行");//状态栏的提示信息
         button2.setEnabled(true);
         button1.setEnabled(false);
         if(thread1==null)
         {
            thread1=new subThread1();
            thread1.start();
        }
        if(thread2==null)
         {
            thread2=new subThread2();
            thread2.start();
        }
      }
       if(obj==button2)
       {
        getAppletContext().showStatus("线程结束运行!");
        if(thread1.isAlive())
        {
          thread1=null;
        }
        if(thread2.isAlive())
        {
          thread2=null;
        }
        button2.setEnabled(false);
        button1.setEnabled(true);
      }
      }

    }
    /*
    public class TT extends EventTest
    {
      public void init()
      {
        new TT();
      }
    }
    */
      

  2.   

    这本书谁翻译的? 台湾人? button2.setEnabled(false); //不使能,默认使能 这像是在说中文么?这种翻译也太不适合初学者吧?
      

  3.   

    老兄,帮忙看看上面我自己写程序的问题在哪里?用appletviewer运行applet程序后没反映,窗口也不出来。例子检查了没问题,谢谢你,帮我找出问题来了我给你分