JavaBeans 教程


(来源:http://www.zdnet.com.cn)

JavaBean是用java语言编写的可重用的软件组件。编写JavaBean组件的方法同编写其他Java类一样。你也可以利用已有的组件, applet小程序或者Java类,并把它们转变为JavaBean。

该教程有两个目的,它们是:

  • 讲授创建JavaBean的基本方法。
  • 阐述所有的JavaBean的背后所包含的基本概念,并演示出这些概念是如何同实际的程序设计技术相关联的。

要学习该教程,你必须安装如下软件:

按照这些程序所附带的安装指南进行安装。

该教程并不能替代JavaBean标准,但是它提供了详细的例子和指导步骤,用于帮助你构建和使用JavaBean。在使用该教程的同时,你可以阅读有关标准的相关章节。你也许可以发现,学习由BDK所提供的这些例子的源代码,会对你很有帮助。

Coffecup Logo定义:Bean是什么?

如果你使用过诸如Delphi 或者Visual Basic这样的软件开发工具的话,那么你就已经有了关于bean的概念。JavaBean是用Java语言编写的可重用软件组件。它可以通过构建工具用可视化的方式创建。一个JavaBean通常简称为Bean。

软件组件是个自含的,可重用的软件单元。通过使用可视化的应用程序构建工具,软件组件可以嵌入到applets小程序,应用程序, servlets和复合组件中。你可以在一个图形化的用户接口下进行这种组合,而且立即就可看到组合的结果。

可重用的软件组件

在软件开发领域中,可重用软件组件借鉴了零组件互换的概念。在很久以前,其它工业领域就已从可重用组件的思想中获益。例如,下图中的一个计算器组件就是由16个按钮组件,一个文本域组件,以及带有按钮和文本显示区的面板。

可重用的软件组件可以是诸如按钮,文本域,列表框,滚动条和对话框等这些简单的组件。

Button Bean
ScrollBar Bean

传统上,上述组件是由第三方软件公司开发销售的,现在这些公司开发销售的则是更加复杂的软件组件,诸如日历和电子表格。

电子表格

如果你使用过诸如Visual Age,Delphi, Visual Basic,Mojo或者PowerBuilder等可视化组件装配工具,你就会熟悉软件组件的概念。Visual Basic Extensions (VBXs) 是首次得到广泛使用的软件组件,之后使用的是同具体编程语言无关的OLE Custom Controls (OCXs)。UNIX程序员则对widgets和toolkits更加熟悉一些。

可重用的组件可以在widgets 中加入标准化的接口和对象自检机制,可以让构造工具查询软件组件的属性和行为。

另外要知道,在运行的应用程序中,软件组件可以不必处于可见状态,只有当构建应用程序时,软件组件才需要处于可见状态。

Components
 

例如,上面的构造工具中,显示出一个计算器组件,它是如下组件组成:16个按钮组件,文本域组件,放置按钮和文本显示区的面板组件。因为你是在构造工具中查看该软件组件,所以你可以观察到另外五个组件(NewCalcFlag, zeroInteger, Accumulator,EnteredStringopcharHolder)。当应用程序正在运行时,这些另外的组件通常是不可见的。这些另外的组件的作用是:保存有关数值或者字符串,这些都是计算的中间结果,操作码和显示串。

程序员在使用构造工具时,可以移动,查询或者可视化地组装组件。通常,这些另外的组件在应用程序运行时发挥作用,尽管对于用户来说,它们并不可见。

你可以从第三方软件商那里购买完成特定功能的JavaBean 组件,你也可以购买支持JavaBean的构造工具或开发程序。应用程序构造工具可以让你使用鼠标作为主要输入工具,来构造Java应用程序。一旦选取组件(可以从工具栏,面板或者菜单中选取)之后,就把它们放到表单或者客户窗口中。你可以通过编辑它们的属性,来改变这些组件的外观和行为,同时,你也可以通过事件和事件处理句柄,连接有关组件。

组件之间也可以嵌套,可以做得非常复杂。例如,由各种组件构造出的计算器,其自身也可成为另外一个应用程序的组件。客户自己构造的组件可以很容易地添加到构造工具库中。更为复杂的组件包括:棒图,流程图编辑器和字处理器。

JavaBean同Widgets的区别?

JavaBean 定义了一个设计时间接口,该接口可以让应用程序设计工具或者构造工具对组件进行查询,以便了解组件所定义的属性种类,发出的事件类型或者所响应的事件类型。

在可视化的应用程序构造环境中,Bean有时后被看作可重用的软件组件或者定制的控件。诸如JavaBean这样的软件组件的封装同标准的Windows控件或者Motif widgets有所区别。它们封装了设计时间信息(属性和方法) ,这些可以让构建工具了解其能力。

除此之外,终端用户或者第三方的软件供应商,在定制Bean时,可以独立于GUI平台或者操作系统的种类。IS部门可以把这些第三方的软件组件散发给其企业的内部客户使用,或者也可以把这些组件作为附加组件出售给任何打算使用构造工具创建应用程序的人。

JavaBean同Java类的区别?

任何一个符合某种属性和事件接口定义约定的Java类可以是一个JavaBean。Bean 是在可视化构造工具中可以被操作的Java 类,并且这些Java 类可以放置到应用程序中。

自检是构造工具分析Bean 如何工作的过程,它可以把Bean同典型的Java类区别开来。由于Bean是用预定义的模式,对其方法和类的定义进行编码的,所以,能够识别这些模式的软件工具就可以对Bean进行分析,并能够设定其属性和行为。

自检可以让Bean在设计阶段进行状态设置,即在作为一个零部件安装到一个大的应用程序的那一刻进行设置。为了实现这个目标,Bean的方法格式必须按照某种模式进行,这样自检工具在设计阶段和运行阶段都能识别出Bean。

实际上,Bean通过其方法中的特定模式发布其属性和行为,这些特定模式可被对应bean的应用程序构造工具识别。尽管如此,这些构造工具不是用来构造或者测试你的bean。同可以让构造工具识别出来一样,这些特定模式可以容易地让人工识别出来。当构造bean时,你首先要了解的是事情之一就是如何识别和构造符合这些模式的方法。

Bean不是什么场合都适合用的,它们最适合用作软件组件,可以在构造工具中,被可视化地操作。诸如JDBCTM API这些的功能仍然最适合通过编程程序接口或者文本接口来提供,而不适合由可视化接口提供。

Bean的基本概念

不考虑其功能,JavaBean是由下列特征定义的。

  • 自检 —Bean支持自检,自检可以让构造工具来分析Bean是如何工作的。自检这个过程遵循称为设计模式的规则,设计模式用于命名Bean的特性。每个Bean都有一个相关的Bean information类,该类提供了关于Bean本身的属性,方法和事件信息。每个Bean information类都实现了BeanInfo接口,该接口专门列出了需要让构造工具知晓的Bean的特性。
  • 属性 —属性控制Bean的外观和行为。构造工具对Bean 进行自检,以便发现其属性,并把这些属性显示出来,以便进行操作。你可以在设计阶段改变Bean的属性。
  • 配置 —一旦Bean的属性显示出来,就可以在设计阶段进行设置。用户可以改变Bean的外观和行为。通过使用属性编辑器或特别的,复杂的Bean设置器,可以对Bean进行设置。
  • 事件 —Bean通过事件同其他Bean进行通信。Bean可以产生事件,即把事件发送给另外一个Bean。发送事件的Bean称为源Bean。接收事件的Bean称为监听Bean。一个监听Bean对从源Bean发来的事件进行监听。构造工具使用自检过程来了解一个Bean所发送的事件以及该Bean所接受的事件。
  • 持续性—Bean使用Java对象序列化,实现java.io.Serializable接口,用于保存和恢复配置结果。例如,当你在应用程序构造工具中设置一个Bean时,将保存原来的状态,之后被改变了的状态就可以被恢复。
  • 方法 —所有的JavaBean中的方法同其他的Java类中的方法是一样的, Bean方法可以被其他Bean调用,也可以被脚本语言调用。JavaBean中的方法在缺省情况下是公用的。

一般情况下,Bean似乎主要是用于构造工具的场合,实际情况并非一定如此,Bean也可以通过编程接口被文本工具手工操作。同构造工具一样,所有的关键的API,包括对事件,属性和持续性的支持,都设计得容易被程序员阅读和理解。

如果你是第一次使用JavaBean,请用一下BDK的 BeanBox。尽管在本教程中,我们使用了BeanBox来创建一个JavaBean, BeanBox通常情况下,是用于测试JavaBean的。BeanBox被认为是个参考的构造工具环境。它既不是用来构造GUI应用程序的,也不同于诸如Visual Age,Delphi或Visual Basic这样的构造工具。

你可以先创建一个JavaBean,之后用BeanBox来测试其运行是否正常。如果一个JavaBean在BeanBox中运行正常,你可以确信它也可以正常工作于其他商用构造工具中。

启动BeanBox

当你启动BeanBox时,你会看到三个窗口:

  • ToolBox 窗口
  • BeanBox 窗口
  • Properties(属性)窗口

ToolBox窗口显示了当前安装在BeanBox中的JavaBean,例如BeanBox demo中带有的一些Bean。一旦BeanBox启动后,它将自动把bean/jars目录中的JAR文件所包含的Bean加载到ToolBox中。你也可以把另外的Bean,比如你自己设计的Bean,添加到ToolBox中。下面的课程中,我们将编写一个简单的JavaBean,以演示如何把Bean添加到ToolBox中。

BeanBox窗口一初始状态下是个空的窗口,你可以使用该空的窗口来创建应用程序,有时,该空的窗口在其它构造工具中被称为表单。

第三个窗口是Properties属性)窗口,显示当前被选取的Bean的属性。当你第一次启动BeanBox时,或者当你点击了BeanBox窗口的背景区域时,如果当前没有Bean被选取,此时,属性窗口就显示出BeanBox的属性。你可以使用属性窗口来编辑Bean的属性。

使用BDK BeanBox

使用Demo BDK提供的JavaBean

要理解BeanBox是如何工作的,最简单的途径就是使用它。BeanBox可以让你无需编写任何Java代码,就可以构造简单的Bean应用程序。作为第一个例子,你可以构造一个简单的“杂耍表演”应用程序,该程序可以根据你所点击的按钮来启动或者停止抛撒咖啡豆的杂耍。

在本课中,你可以学到:

  • 如何从ToolBox中选取一个Bean放到BeanBox中,并且通过使用属性表格及其相应的属性编辑器改变其属性。
  • 如何让一个Bean发送出一个事件,而另外一个Bean响应该事件。
 

创建Bean

开始时,我们从ToolBox中选取Juggler Bean,并它放到空的BeanBox窗口中。

 

1.在Toolbox中点击Juggler Bean,以便选取它。注意到光标此时变为十字状。  
   

2.   把光标停留在在BeanBox窗口中的某处,之后,点击鼠标。

这样,就在BeanBox中插入了一个Juggler Bean。Juggler四周加亮显示的方框表明:Juggler是目前被选取的bean。

下一步,我们将加入按钮,来控制Juggler(杂耍)。该按钮 Bean是OurButton Bean 类的一个实例。

   
3.   在ToolBox 点击OurButton Bean,之后把该按钮的一个实例放到BeanBox中。在BeanBox中选取该按钮,这样,按钮的属性就在属性表中显示出来。

 

   

4.   在按钮的属性表中编辑按钮的标签域,使得该按钮的标签为“start”(启动)。

注意到:在BeanBox中,按钮上的文字此时已经从“press”改变为“start”(启动)。

   

5.   在BeanBox的编辑菜单中,选取一个由启动按钮发送的一个动作事件。在选取事件动作之前,务必已经选取了启动按钮。

注意到,一旦你选取actionPerformed菜单项,BeanBox 就进入了如下新状态:此时,从启动按钮上生成了一条红色的直线,并且随着你的鼠标的移动而移动。这表明该按钮是发送事件的源Bean,下一步动作,就应该在目标Bean上点击鼠标,目标Bean上定义了相应的事件处理方法。本例子中,目标Bean就是Juggler Bean。

 

   

6.   把直线从启动按钮处拖到Juggler Bean上,并松开鼠标按钮,就会出现一个对话框,该对话框中列出了Juggler Bean所定义的各种事件处理方法。

7.   选取startJuggling方法,之后,点击OK。

现在,一旦你点击启动按钮之后,Duke就象一个职业杂技表演者那样开始抛撒咖啡豆了。

在Juggler的属性表编辑器中,你可以手工设置标签名为animationRate的属性值,这样,你就可以控制Duke抛撒咖啡豆的速度。为了保证出现的是同Bean相对应的属性表编辑器,在BeanBox框架中,当前所选取的Bean必须是Juggler。

 

   

完成你的程序

要完成该例子程序,还要添加一个停止按钮。只需仿照上述步骤,重复进行即可:

1.   在Toolbox 菜单中,从现有的Bean中选取OurButton,之后把它放到BeanBox中启动按钮的下方。

一旦该新按钮成为当前的所选中的Bean,就会出现相应的属性编辑器。

2.   编辑属性表中的label(标签)域,使得其文字为“stop”。

3.   把stop(停止)按钮所对应的事件设置为Juggler的stopJuggling方法。注意,要确保stop(停止)按钮为当前所选的bean。

4.   从Edit/Events菜单中选择actionPerformed事件。

5.   把 stop(停止)按钮这个源Bean所对应的事件线拖到目标Bean Juggler(杂耍)上。点击并松开鼠标按键,使得直线把两个Bean连接起来。

6.   Juggler Bean会显示出可以采用的事件处理方法的对话框,选择stopJuggling事件,并点击OK。

现在,你可以通过点击相应的按钮,来启动或者停止juggler(杂耍)了。

总结

现在,你已经学会了如何从ToolBox 中选取各种Bean,并把它们放到BeanBox中。一旦放到BeanBox中之后,你可以使用Bean的属性表和属性编辑器来改变其外观。你也可以使用BeanBox 菜单中的选项,把一个Bean的事件同另外一个Bean建立关联,以便初始化和控制Bean的动作。

记住,BeanBox并不是一个应用程序构造工具,它的主要目的是用来测试Bean,以及验证自检和事件处理是否工作正常。你不要用BeanBox来来构造和运行一个应用程序。

相反,你可以把BeanBox作为一个参考构造工具,如果你的Bean在BeanBox中能够正常运行,而且结果表明,该bean生成和响应了合适的事件,你可以确信的是:该bean在其他支持Bean的构造工具中也一定会正常工作。