這個  gui3.java 是照我之前要大家測試的方法修改 gui.java, 
當然改了檔案名稱以及 class, constructor, 並加上註解  !
還有, 為了方便加上註解, 我把許多 lines 拆開儘可能一列只寫一 statement :-)

D:\jtest> path "c:\Program Files\Java\jdk1.6.0_24\bin";%path%  
D:\jtest> javac gui3.java 
D:\jtest> java gui3 

D:\jtest> linenum < gui3.java  
   01 //gui3.java -- gui3 sample, @CopyLeft by tsaiwn@cs.nctu.edu.tw
   02 //加上一些註解
   03 //package ...;  // 指定我這 class 的命名空間 namespace, 阿就是要放哪個目錄啦
   04 import java.applet.*;
   05 import java.awt.*;
   06 import java.awt.event.*;
   07   // 注意要寫 public class 不然  Applet 有問題
   08 public class gui3 extends Applet implements ActionListener {   // 我就是 Applet
   09    Panel ppp;    // 木板 (面板)
   10    Button bbb;   // 按鈕
   11    TextArea tt;    // 文字區
   12    TextField tx;   // 文字一列的欄
   13 
   14    public static void main(String gg[ ]) {     // Java 的主程式都這樣寫
   15        Frame f = new Frame("Windows 2011");        // 開個窗 f
   16        gui3 me = new gui3( );       // 模仿 Applet ..   // 生出自己 (class gui3 )
   17        me.init( );      // 因為 Applet 被生出後先做 init( );
   18        me.start( );     // ..    再做  start( )
   19        f.add(me, "Center");   // 把 Applet (me) 放入窗 f 內
   20        f.setSize(580, 520);   // Frame 是 Window, 用 BorderLayout
   21        f.setVisible(true);   // f.show( ); 
   22        Bird ggyy = new Bird(f);  // 把 f 傳過去給 Bird 的 constructor記住!
   23        f.addWindowListener( ggyy );   // 注意不是寫 this 了喔!
   24        // 這個要求監聽的句子可以寫在 f 被 new 出來之後的任何地方! 
   25    } // main(
   26 
   27    void println(String fmt, Object... oo) { print(fmt+"\n", oo); }
   28    void print(String fmt, Object... oo){System.out.printf(fmt, oo); }
   29    void prinf(String fmt, Object... oo){System.out.printf(fmt, oo); }
   30  
   31    public gui3( ) { 
   32        super( );   // 可以不寫
   33        println(" Now doing ...  gui3 constructor !");
   34    } // Constructor; 注意要寫 public 不然  Applet 有問題
   35    public void start( ) {
   36        super.start( );
   37        println(" Now in start( ) ... ");
   38    }// start(
   39   /////////////////////////////
   40    public void init( ) {
   41        ppp = new Panel( );  tx=new TextField("你可以在這打字", 38);
   42        bbb = new Button(" empty 按這裡看看 ");
   43        ppp.add(bbb);   // 把 bbb 按鈕塞入 ppp 木板 
   44        ppp.setSize(280, 120);    // 好像沒有用ㄟ ?
   45        bbb.setFont(new Font("標楷體",1,36));
   46   
   47        bbb.addActionListener(this);   // 要求監聽這個按鈕 (看板) 
   48 
   49        setLayout(new BorderLayout( ) );  // change Layout Manager 擺設經理
   50          // 因為 Applet 是 Panel, 其 default Layout Manager 是 FlowLayout
   51           // 設為  BorderLayout 後就可以指定 東西南北中  五個方位 放入元件
   52        ppp.setBackground(Color.pink);    // 背景色 粉紅
   53        tt = new TextArea("Hahaha\n", 5,20,TextArea.SCROLLBARS_BOTH);
   54        add(ppp, "North");    /// ppp 放 我 (gui3,  是Applet)的 北邊
   55        add(tt, "Center");    /// tt 文字區塊 放 我 (gui3,  是Applet)的 正中間
   56        tt.setFont(new Font("Ariel",3,32));   // 字體大一些
   57        Panel pn = new Panel( ); 
   58        Panel ptt=new Panel( );
   59        Panel pOut = new Panel( ); 
   60        pOut.setLayout(new BorderLayout( ));   // 外匡面版用 BorderLayout
   61        pOut.add(pn, "South");  // pn 塞在  pOut 這 Panel 內 :-) 木板上再放木板!
   62        pOut.add(ptt,"North");  // pOut 內塞兩個 Panel : pn, ptt
   63        //  現在 pOut 木板上有兩塊木板:  ptt 上, 下是 pn  (南)
   64        ptt.add(new Button("請在右邊打字: "));     // 放入 ptt
   65        ptt.add(tx);      // 依序 放入 ptt
   66       /// 再來, pn 這木板上 放入很多按鈕 ! 所以用 array 陣列 比較方便 !
   67        pn.setBackground(Color.yellow); 
   68        tx.setFont(new Font("標楷體",1,16));  
   69        bt = new Button[98];  // 只會生出 98 個參考 (阿其實就是 C++ 的指標啦)
   70           // 上列生出 98 個 參考(Reference) 不會用很多記憶體 :-)
   71           // 實際上會生出幾個按鈕是由 bMsg.length 決定 (看下列)  
   72        for(int i=1; i< bMsg.length; ++i) {     // 這樣寫是個好習慣!
   73                             // 因為你去改 bMsg 陣列增加元素也不用來改這裡  :-)
   74            bt[i] = new Button(bMsg[i]);   // 真正生出六個 Button (注意 0 故意不用)
   75            pn.add(bt[i]); bt[i].setFont(new Font("細明體",0 ,16));
   76                  // 注意上列是在做勞作 :-)  把按鈕加入 pn 木板 !
   77            bt[i].addActionListener(this);    // 請求監聽 "動作事件"(ActionEvent)
   78                // 注意上列是要求監聽 bb[i] 喔 !
   79        } // for int i
   80        add(pOut, "South");   // 把 pOut 塞入我(gui3)這個 Applet 南邊
   81        bt[3].setForeground(Color.red); 
   82        validate( );  //  做了一些對圖形元件 的動作記得要做這  validate( ); 
   83    } // init(
   84 
   85    Button bt[ ];   // 宣告說 bt[ ]  是 Button 陣列 (array)
   86    String bMsg[ ] = {"000", "Bt001", "btBBB",
   87        "哈哈哈會讀輸入", "bt西西", "BT五", "六 六 大順 囉", "Bye"  
   88           ,"八仙過海囉", "More Button"
   89         };   // 結束要有分號 ! 因大括號內是 Data !  
   90 
   91    public void paint(Graphics g) {
   92        System.out.println(" Paint kk = " + kk++);
   93        // do drawing something ...
   94        validate( );  //
   95    } // paint(
   96 
   97    public void actionPerformed(ActionEvent e) {
   98        Object what = e.getSource( );    // 誰被按了一下 ?
   99        String gg = "You press " + e.getActionCommand( );
  100 
  101        if(what == bbb) { 
  102          cid =  (cid+1) % yyc.length;
  103          bbb.setForeground( yyc[cid] ); return;}   // 做完就 return
  104 
  105        if(what == bt[7]) System.exit(0);  // myFrame.dispose( );
  106        if(what == bt[1]) ppp.setBackground(Color.red);
  107        if(what == bt[6]) { ppp.setBackground(Color.green);
  108            tt.append("如果 林志玲 來演講, 你會去聽嗎? ");  } // if
  109        bbb.setLabel(gg);  tt.append(gg+"\n");
  110        if(what == bt[3])  { tt.append("讀到 " + tx.getText( ) + "\n");
  111            ppp.setBackground(Color.gray);  }
  112        repaint( );  // 會偷叫 update(Graphics);
  113    } // actionPerformed( 
  114  
  115    public void update(Graphics g) {  // 只是看看何時會跑過來這
  116        System.out.println(" update ==> kk = " + kk++);
  117        super.update(g); //  叫用上層(super class)的 update( )
  118    } // update(  will called by repaint( )
  119   
  120    public void stop( ) {  //跑去別的網頁會到這
  121        super.stop( );
  122        println(" STOP ..now in stop( ) ... ");  // 只是看看何時會跑過來這
  123    }// stop(
  124 
  125    public void destroy( ) {   // 當 Browser 被關閉會到這
  126        println(" ! now in destroy( ) ... ");  // 只是看看何時會跑過來這
  127        super.destroy( );
  128    }// destroy(  
  129   ////////   ==============================================  ///////////////
  130 
  131    int rand( ) { return (int) (32768* Math.random( ) ); }  //模仿 C
  132 
  133    ///gui2.java
  134      Color yyc[ ] = { Color.red, Color.green, Color.blue
  135          , Color.PINK, new Color(198,222,66), new Color(198,8,198) 
  136        };   // 注意這array yyc[ ]結束也要有分號; 因為大括號內是 Data !
  137      int cid = -1;
  138      int kk = 0;  // Global variable to this class 
  139 } // class
  140 /// 
  141 //Bird.java      /// NEW in gui3.java
  142 //以下可以放另一個檔案, 也可跟別的 class 放在同一個檔案   <font color=Red>
  143 //請注意因寫在同一個檔案故不可再寫 public class; 一檔案最多一個 public class
  144 class Bird  implements  java.awt.event.WindowListener  {
  145      Frame myFrame = null;
  146      Bird(Frame fff) { myFrame = fff; }  // 記住以便日後各函數用到
  147      public void windowOpened(java.awt.event.WindowEvent e) {;}
  148      public void windowClosed(java.awt.event.WindowEvent e) {;}
  149      public void windowIconified(java.awt.event.WindowEvent e) {;}
  150      public void windowDeiconified(java.awt.event.WindowEvent e) {;}
  151      public void windowActivated(java.awt.event.WindowEvent e) {;}
  152      public void windowDeactivated(java.awt.event.WindowEvent e) {;}
  153     ///以上不寫內容還是要留著喔!
  154      /// 點按窗右上角的 X 會執行以下 windowClosing( )
  155      public void windowClosing(java.awt.event.WindowEvent e) { 
  156          System.out.println("Bye bye 再見..再見..");
  157          if(myFrame != null) myFrame.dispose( ); //System.exit(0);
  158          // 注意我故意用跟前面說明不太一樣的做法 !
  159      } // windowClosing(
  160 }// class Bird 

D:\jtest> 


你可以把 Bird 這 class 切出來另存在 Bird.java 檔案內, 然後再測試看看, 阿當然結果是一樣的啦! 你也可以建立一個簡單文字檔 y33.htm 含以下句子: <applet code=gui3 width=688 height=500> </applet> 然後再把該 y33.htm 網頁開啟來看看 ! 調整窗的大小看看 ! 再建立一個 y38.htm 含以下句子(Applet 大小會隨窗大小改變!): <applet code=gui3 width=88% height=66%> </applet> 然後再把該 y38.htm 網頁開啟來看看 ! 調整窗的大小看看 !