一般要求
首先您必须有一个不带有参数的公用构造器此构造器也应该通过调用各个特性的设置方法来设置特性的缺省值例如
publicFireworks()
{
setAutoStart(true);
setBackground(Colorblack);
setSpeed();
setRadius();
}
如果 bean 是一个从 javaawtComponent 类继承而来的可视 bean您就应该为 bean 定义一个缺省的首选大小例如
publicDimensiongetPreferredSize()
{
return(newDimension(radius*radius*));
}
publicDimensiongetMinimumSize()
{
returngetPreferredSize();
}
特性
对于您需要的每个特性您应该有一个带有匹配公用 getter 和 setter 方法的专用实例变量例如
privateintspeed;
publicintgetSpeed()
{
returnspeed;
}
publicvoidsetSpeed(ints)
{
speed=s;
}
此 get 和 set 方法必须有与实例变量相同的名称但是第一个字母要大写并以 get 和 set 开头
由于连接而在任何时候更改它们的特性时确认 Bean 在运行时行为正确也是很重要的如果特性的更改影响到 Bean 的可视外观您应该以此特性设置的方法来调用
repaint();
同样如果特性的更改影响到 bean 的大小和位置您需要确认获得验证的事物我们建议编写您自己的 validateAll 方法如下所示
privatevoidvalidateAll()
{
if(isValid())
{
Componentself=this;
selfinvalidate();
ComponentmyParent=selfgetParent();
if(myParent!=null)
{
myParentinvalidate();
self=myParent;
}
selfvalidate();
}
}
然后以此特性设置的方法调用
validateAll();
bean 类将无法进行关于调用特性设置方法命令的假设您应该写 bean 以便可以初始构造它然后在不引起错误的同时在任何命令中设置其特性
操作
对于每个您需要的操作您应该有一个公用方法例如
publicvoidstart()
{
if(thread==null)
{
thread=newThread(this);
threadstart();
}
}
您为操作写的方法应该在无须期待用户创建连接或设置很多特性的情况下独立操作 例如如果您写了一个音频 Bean您希望通过播放操作处理打开声音的所有步骤完成您需要的所有设置并播放声音同样即使声音未播放停止操作也应起作用
事件
对于您需要的每个事件或事件设置您应该定义事件和侦听器类对于此例查看 FireworksEventjava 源文件以及 Fireworksjava 文件此事件类的源应该如同这样
importjavaawt*;
importjavautil*;
publicclassFireworksEventextendsEventObject
{
publicstaticfinalintEXPLODED=;
intid=;
publicFireworksEvent(Componentsourceintid)
{
super(source);
thisid=id;
}
publicintgetID()
{
returnid;
}
}
您应该为此事件设置中的每个事件定义一个公用静态结束事件标识符例如在此例子中的 EXPLODED
对于侦听器类的源查看 FireworksListenerjava 源文件
importjavautil*;
publicinterfaceFireworksListenerextendsEventListener
{
publicabstractvoidexploded(FireworksEvente);
}
您应该为此事件设置中的每个事件定义一个公用抽象方法例如在此例子中的 exploded 而且侦听器类必须扩展 EventListener 以使 JAR 向导能够找到它
然后如果由 bean 类播送事件它必须跟蹤侦听事件的对象要这样做您需要定义侦听器实例变量以及 addListener 和 removeListener 方法返回 Fireworksjava 源例如您将查看到
privateVectorlisteners=newVector();
publicvoidaddFireworksListener(FireworksListenerf)
{
listenersaddElement(f);
}
publicvoidremoveFireworksListener(FireworksListenerf)
{
listenersremoveElement(f);
}
最后bean 类需要以正确的次数将事件实际播送到所有的侦听器要这样做您需要定义 processEvent 方法并以适当的次数调用它例如
publicvoidprocessFireworksEvent(FireworksEvente)
{
for(Enumerationenum=listenerselements();enumhasMoreElements();)
((FireworksListener)enumnextElement())exploded(e);
}
publicvoidrun()
{
processFireworksEvent(newFireworksEvent(thisFireworksEventEXPLODED));
}