2008年5月28日 星期三

5 kinds of event handler styles

依處理器所掛的位置,總共有5種寫法,以計時器處理器為例,
A.處理器掛在外部類別下:

 import javax.swing.Timer;
 import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 public class TimerTest1
 {
   public static void main(String args[]) throws Exception
   {
     ActionListener al = new TimerHandler();
     Timer t = new Timer(1000,al);
     t.start();
     Thread.sleep(10000);
     t.stop();
   }
 }
 
class TimerHandler implements ActionListener
 {
   public void actionPerformed(ActionEvent ae)
   {
     System.out.println("執行每次叫醒要作的事1");
   }
 }


B.處理器掛在內部匿名類別下:

 import javax.swing.Timer;
 import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 public class TimerTest2
 {
   public static void main(String args[]) throws Exception
   {
     ActionListener al = new ActionListener()
       {
  public void actionPerformed(ActionEvent ae)
  {
    System.out.println("執行每次叫醒要作的事2");
  }
       };
     Timer t = new Timer(1000,al);
     t.start();
     Thread.sleep(10000);
     t.stop();
   }
 }


C.處理器掛在內部有名類別下:

 import javax.swing.Timer;
 import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 public class TimerTest3
 {
   public static void main(String args[]) throws Exception
   {
     new TimerTest3();
   }

   TimerTest3() throws Exception
   {
     ActionListener al = new TimerHandler();
     Timer t = new Timer(1000,al);
     t.start();
     Thread.sleep(10000);
     t.stop();
   }

   private class TimerHandler implements ActionListener
   {
     public void actionPerformed(ActionEvent ae)
     {
       System.out.println("執行每次叫醒要作的事3");
     }
   }
 }


D.處理器掛在本身類別下:

 import javax.swing.Timer;
 import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 public class TimerTest4 implements ActionListener
 {
   public void actionPerformed(ActionEvent ae)
   {
     System.out.println("執行每次叫醒要作的事4");
   }

   public static void main(String args[]) throws Exception
   {
     ActionListener al = new TimerTest4();
     Timer t = new Timer(1000,al);
     t.start();
     Thread.sleep(10000);
     t.stop();
   }
 }


E.處理器同時掛在內部和外部類別下:

 import javax.swing.Timer;
 import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 public class TimerTest5
 {
   public static void main(String args[]) throws Exception
   {
     ActionListener al = new ActionAdapter()
       {
  public void actionPerformed(ActionEvent ae)
  {
    System.out.println("執行每次叫醒要作的事5x");
  }
       };
     Timer t = new Timer(1000,al);
     t.start();
     Thread.sleep(10000);
     t.stop();
   }
 }

 class ActionAdapter implements ActionListener
 {
   public void actionPerformed(ActionEvent ae)
   {
     System.out.println("執行每次叫醒要作的事5");
   }
 }

2008年5月22日 星期四

cisco nat usage


inside local ip, 內部私有ip
inside global ip, 內部私有ip之對外公開代表ip
outside global ip, 外部公開ip
outside local ip, 外部公開ip之對內私有代表ip
--
ilip olip (內) NAT路由器 (外) igip ogip
--
nat分一對一,一對多,多對一,多對多轉址
一對一,靜態,單址對應到單址
一對多,動態,單址對應到池群,輪流負載平衡
多對一,動態,清單群對應到單址,埠超載
多對多,動態,清單群對應到池群,埠超載
--
清單群(list number/name)
基本清單(限定來源),擴張清單(限定來源去處,埠號)
池群(pool name)
IP範圍起終點,遮罩
負載平衡(type rotary)
埠超載(port overload)
--
nat分動態(dynamic)及靜態(static)轉址
動態只具單向連線性,內可主動連外,外則不可主動連內
靜態則具雙向連線性,內可主動連外,外也可主動連內
--
ip nat inside source 內清單群 外池群/單址
用於內向外的來源住址轉換,ilip 內->外 igip
將內部發出之私有來源住址轉成外部公開來源住址
可保護內部電腦不為外界入侵

ip nat inside destination 外清單群 內池群/單址
用於外向內的目的住址轉換,ilip 內<-外 igip
將外部發出之公開目的住址轉成內部私有目的住址
可作內部伺服器對外之負載平衡

ip nat outside source 外清單群 內池群/單址
用於外向內的來源住址轉換,olip 內<-外 ogip
將外部發出之公開來源住址轉成內部私有來源住址
可作對稱式連外路由,或重疊網路間之橋樑,內部有外部公開住址

ip nat outside destination 內清單群 外池群/單址
用於內向外的目的住址轉換,olip 內->外 ogip
將內部發出之私有目的住址轉成外部公開目的住址
可限制內部對外連線對象

2008年5月21日 星期三

strut, glue, rigid area in BoxLayout


盒子排版器(BoxLayout)有3種無互動,純佔面積用之視窗元件可用,
摘要如下,


1.strut (支架)
Component v = Box.createVerticalStrut(h); //新增隱形固定高度h像素之垂直支架
Component h = Box.createHorizontalStrut(w); //新增隱形固定寬度w像素之水平支架

2.glue (黏膠)
Component v = Box.createVerticalGlue(); //新增隱形垂直等間隔黏膠
Component h = Box.createHorizontalGlue(); //新增隱形水平等間隔黏膠
Component g = Box.createGlue(); //新增隱形等間隔黏膠,適用於垂直或水平盒子排版器

3.rigid area (硬塊), 相當於2維支架
Dimension d = new Dimension(h,w); // 新增寬h,高w尺寸
Component ra = Box.createRigidArea(d); // 依給定尺寸新增隱形硬塊

PS:
deitel-php-05-java how to program 6th ed