一般要求
首先,您必須有一個不帶有參數的公用構造器。此構造器也應該通過調用各個特性的設置方法來設置特性的缺省值,例如:
public fireworks()
{
setAutoStart(true);
setBackground(Color.black);
setSpeed(10);
setRadius(40);
.
.
.
}
假如 bean 是一個從 java.awt.Component 類繼續而來的可視 bean,您就應該為 bean 定義一個缺省的首選大小,例如:
public Dimension getPReferredSize()
{
return (new Dimension(radius*3, radius*3));
}
public Dimension getMinimumSize()
{
return getPreferredSize();
}
特性
對于您需要的每個特性,您應該有一個帶有匹配公用 getter 和 setter 方法的專用實例變量,例如:
private int speed;
.
.
.
public int getSpeed()
{
return speed;
}
public void setSpeed(int s)
{
speed = s;
}
此 get 和 set 方法必須有與實例變量相同的名稱,但是第一個字母要大寫并以 get 和 set 開頭。
由于連接而在任何時候更改它們的特性時,確認 Bean 在運行時行為正確也是很重要的。假如特性的更改影響到 Bean 的可視外觀,您應該以此特性設置的方法來調用
repaint();。
同樣,假如特性的更改影響到 bean 的大小和位置,您需要確認獲得驗證的事物。我們建議編寫您自己的 validateAll 方法,如下所示:
private void validateAll()
{
if (isValid())
{
Component self = this;
self.invalidate();
Component myParent = self.getParent();
if (myParent != null)
{
myParent.invalidate();
self = myParent;
}
self.validate();
}
}
然后以此特性設置的方法調用
validateAll();。
bean 類將無法進行關于調用特性設置方法命令的假設。您應該寫 bean 以便可以初始構造它,然后在不引起錯誤的同時在任何命令中設置其特性。
操作
對于每個您需要的操作,您應該有一個公用方法,例如:
public void start()
{
if(thread==null)
{
thread=new Thread(this);
thread.start();
}
}
您為操作寫的方法應該在無須期待用戶創建連接或設置很多特性的情況下獨立操作。 例如,假如您寫了一個音頻 Bean,您希望通過播放操作處理打開聲音的所有步驟、完成您需要的所有設置并播放聲音。同樣,即使聲音未播放,停止操作也應起作用。
事件
對于您需要的每個事件或事件設置,您應該定義事件和偵聽器類。對于此例,查看 FireworksEvent.java 源文件以及 Fireworks.java 文件。此事件類的源應該如同這樣:
import java.awt.*;
import java.util.*;
public class FireworksEvent extends EventObject
{
public static final int EXPLODED = 1;
int id = 0;
public FireworksEvent(Component source, int id)
{
super(source);
this.id = id;
}
public int getID()
{
return id;
}
}
您應該為此事件設置中的每個事件定義一個公用靜態結束事件標識符,例如在此例子中的 EXPLODED。
對于偵聽器類的源,查看 FireworksListener.java 源文件:
import java.util.*;
public interface FireworksListener extends EventListener
{
public abstract void exploded(FireworksEvent e);
}
您應該為此事件設置中的每個事件定義一個公用抽象方法,例如在此例子中的 exploded。 而且,偵聽器類必須擴展 EventListener ,以使 JAR 向導能夠找到它。
然后,假如由 bean 類播送事件,它必須跟蹤偵聽事件的對象。要這樣做,您需要定義偵聽器實例變量以及 addListener 和 removeListener 方法。返回 Fireworks.java 源,例如,您將查看到:
private Vector listeners = new Vector();
.
.
.
public void addFireworksListener(FireworksListener f)
{
listeners.addElement(f);
}
public void removeFireworksListener(FireworksListener f)
{
listeners.removeElement(f);
}
最后,bean 類需要以正確的次數將事件實際播送到所有的偵聽器。要這樣做,您需要定義 processEvent 方法并以適當的次數調用它,例如:
public void processFireworksEvent(FireworksEvent e)
{
for (Enumeration enum = listeners.elements(); enum.hasMoreElements(); )
((FireworksListener)enum.nextElement()).exploded(e);
}
public void run()
{
.
.
.
processFireworksEvent(new FireworksEvent(this, FireworksEvent.EXPLODED));
}
|
新聞熱點
疑難解答