免费预览已结束,剩余10页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ActiveX技术原理网络实名插件通过微软ActiveX技术来进行安装,点击弹出窗口中的“详细信息”后,微软已经告诉用户应该了解的信息(包括数字证书的发行商、有效期、所有者等),并根据用户点击“是”或“否”来决定是否安装插件。网络实名插件安装时的弹出窗口是ActiveX标准的安装界面,是由Windows控制的,只能通过点击上面的链接来查看软件详细介绍和使用许可协议等信息。 什么是ActiveX插件?根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。 ActiveX插件的安装方式如何?在因特网上,ActiveX插件软件的特点是:一般软件需要用户单独下载然后执行安装,而ActiveX插件是当用户浏览到特定的网页时,IE浏览器即可自动下载并提示用户安装。 ActiveX插件安装的一个前提是必须经过用户的同意及确认。 哪些厂商和软件使用ActiveX技术?ActiveX插件技术是国际上通用的基于Windows平台的软件技术,除了网络实名插件之外,许多软件均采用此种方式开发,例如Flash动画播放插件、Microsoft MediaPlayer插件、CNNIC通用网址插件等。 浏览器如何保证ActiveX插件的安全性?当通过Internet发行软件时,软件的安全性是一个非常引人注意的问题,IE浏览器通过以下的方式来保证ActiveX插件的安全: ActiveX使用了两个补充性的策略:安全级别和证明,来追求进一步的软件安全性; Microsoft提供了一套工具,可以用它来增加ActiveX对象的安全性; 通过Microsoft的验证代码工具,可以对ActiveX控件进行签名,这告诉用户你的确是控件的作者而且没有他人篡改过这个控件; 为了使用验证代码工具对组件进行签名,必须从证书授权机构获得一个数字证书;证书包含表明特定软件程序是正版的信息,这确保了其他程序不能再使用原程序的标识。证书还记录了颁发日期。当您试图下载软件时,Internet Explorer 会验证证书中的信息,以及当前日期是否在证书的截止日期之前。如果在下载时该信息不是最新的和有效的,Internet Explorer 将显示一个警告; 在IE默认的安全级别中,ActiveX控件安装之前,用户可以根据自己对软件发行商和软件本身的信任程度,选择决定是否继续安装和运行此软件。 网络实名插件使用了国际权威安全厂商Verisign所颁发的数字证书进行签名,因此可以确保网络实名插件的真实性和安全性。 1. ActiveX概要1.1. ActiveX的定义ActiveX是Microsoft提出的一组使用COM(Component Object Model,部件对象模型)使 得软件部件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被 用于方便地创建普通的桌面应用程序。1.2. ActiveX的内容ActiveX既包含服务器端技术,也包含客户端技术。其主要内容是:* ActiveX控制(ActiveX Control);用于向WEB页面、Microsoft Word等支持ActiveX 的容器(Container)中插入COM对象。* ActiveX文档(ActiveX Document);用于在WEB Browser或者其它支持ActiveX的容器 中浏览复合文档(非HTML文档),例如Microsoft Word文档,Microsoft Excel文档或者用户自 定义的文档等。* ActiveX脚本描述(ActiveX Scripting);用于从客户端或者服务器端操纵ActiveX控 制和Java程序,传递数据,协调它们之间的操作。* ActiveX服务器框架(ActiveX Server Framework);提供了一系列针对WEB服务器应 用程序设计各个方面的函数及其封装类,诸如服务器过滤器、HTML数据流控制等。* 在Internet Explorer中内置Java虚拟机(Java Virtual Machine),从而使Java Applet能够在Internet Explorer上运行,并可以与ActiveX控制通过脚本描述语言进行通信。 1.3. ActiveX与Java的比较ActiveX提供了一种扩展包括Java在内的任何编程语言的机制,Java的开发人员可以在Applet中使用ActiveX技术,直接嵌入ActiveX控制,或者以ActiveX技术为桥梁,将其它开发商提 供的多种语言的程序对象集成到Java中。与Java的字节码技术相比,ActiveX提供了“代码签名”(Code Signing)技术保证其安全性。1.4. Internet Explorer和Netscape Navigator不言而喻,Microsoft的Internet Explorer全面支持ActiveX。同时,Microsoft提供了 Netscape Navigator的插件(Plug-In),从而使Navigator也可以浏览包含有ActiveX部件的WEB 站点。2. ActiveX控制和InternetActiveX控制是OLE控制的更新版本。控制(Control)是建立可编程部件(Component) 的主要元素。ActiveX控制可以用于所有支持COM规范的容器中,或者作为Internet控制嵌入到WEB页面中。用户访问该页面时将下载该控制并自动在本地注册。利用脚本描述语言(Script)可 以在控制之间以及客户与服务器之间通过设置属性(Property)、调用方法(Method)和激活事 件(Event)进行通信。ActiveX控制与以前的OLE控制相比,具有更少的接口,并且可以没有窗口。所有的ActiveX控制都支持IUnknown接口。目前,很多第三方开发商编制了各式各样的ActiveX控制。在Internet上,有超过1000个 ActiveX控制供用户下载使用。在WINDOWS的SYSTEM目录下,保存有很多Window提供的ActiveX控 制。Microsoft Visual C+(以下简称VC)提供的MFC(Microsoft Foundation Classes)控制 都是ActiveX控制。考虑到当前Internet相对较低的传输速率,设计运行于Internet的ActiveX控制时,必须 考虑以下几个问题:* 控制尽可能小;* 持续存储数据(Persist Data)如何保存;* 如何在Internet上下载和安装;* 控制如何在客户端注册;3. ActiveX文档和InternetActiveX文档提供了传统的嵌入对象的扩展方法。ActiveX文档对象可以包含多个页,显 示在整个客户区中,并支持原有的菜单功能。与以往的嵌入对象不同的是,ActiveX文档对象不再 以一个阴影方框包围来显示,而是全框架(Full Frame),并总处于激活状态。Microsoft Office97提供了Microsoft Office Binder,用来生成并浏览由Microsoft Word、Microsoft Excel或者用户定义的ActiveX文档等构成的复合文档,每一种文档类型都可以 直接进行编辑修改。ActiveX文档可以作为对象嵌入到WEB网页中,在WEB上发布。4. ActiveX脚本描述语言利用VBScript或者Microsoft JScript,可以向Web页面中加入可用于交互的ActiveX控制,将数据预处理或者检验过程放在客户端进行,然后将结果传往WEB服务器。5. ActiveX服务器框架在WEB服务器上创建扩展应用程序,动态生成WEB页面。使用MFC提供的ISAPI类可以方便 地建立WEB服务器端的扩展应用程序。6.2. ActiveX控制在WEB上的应用考虑到WEB的安全性,为了在服务器与客户端建立良好的信任关系,必须为每个在WEB上 使用ActiveX控制设置一个“代码签名”(Code Signing)。VC5.0提供了生成供测试用的“代码 签名”的工具。如果要正式发布,则必须向有关机构申请。(参见http:// intdev/signcode/)在WEB页面中使用ActiveX控制,还要对之进行包装,将有关的动态连接库及信息文件压 缩到一个扩展名为CAB(Cabinet)文件中。可以使用VC5.0提供的工具包装ActiveX控制。在HTML 文件中,使用OBJECT标签插入ActiveX控制,并利用VBScript或者JScript访问该ActiveX控制。客 户端用Internet Explorer浏览此页面时,可以自动解包该文件。出于安全性的考虑,InternetExplorer为ActiveX 部件的下载、初始化、是否拥有合法的代码签名以及是否允许Scripting 等设置了不同的安全级别,用户可根据需要进行设置。下面这个例子中,使用了ActiveX控制MSChart.OCX,当用鼠标单击此控制时,控制的标题将改变。OBJECTCLASSID=clsid:31291E80-728C-11CF-93D5-0020AF99504ACODEBASE=MSCHART.CAB#version=1,0,0,0ID=chart1WIDTH=400HEIGHT=200ALIGN=center/OBJECTSCRIPT language = VBScriptSub chart1_Click()Document.chart1.TitleText=My Title End Sub这里,必须提供该OCX的ClassID和文件路径或URL。客户端浏览此页面时,先在本地的注 册表中查找该ClassID,如果存在,则不必下载。否则,必须按照CODEBASE指定的路径搜索该控 制并下载。标签Object中的ID是该OCX的对象的名称,用来访问和设置对象属性,调用对象方法 等。6.7. ActiveX SDKVC5.0还提供了专门的WIN32 ActiveX开发工具:ActiveX Software Development Kit( ActiveX SDK)。ActiveX SDK包含一系列接口定义及与Internet有关的WIN32函数,包括ActiveX Scripting Component、Web Browsing Object、WebPost API等,用户可以利用这些接口和API开发面向WEB的应用程序或ActiveX部件。6.8. Visual C+ 6.01998年9月,Microsoft将推出的Visual C+6.0。VC6.0除了保留VC5.0的ActiveX支持外 ,还将支持DHTML,MFC及ATL的类库及模板也有扩充。用户可以方便地开发出类似WEB浏览器界面 的应用程序。7.2. 包装ActiveX部件上述ActiveX部件都可以使用VB5.0的Setup Wizard进行包装,生成采用Lempel-Ziv压缩 算法的CAB文件,在WEB上发布。Setup Wizard将把相关的动态连接库及信息文件一同包装。使用 VB5.0生成的ActiveX 部件,可以包装成Safe Scripting和Safe Initializing。7.3. ActiveX文档在WEB上的应用向WEB页面中加入ActiveX文档,首先要将该ActiveX文档包装成CAB文件。由于Internet Explorer读入ActiveX文档时,该文档将取代当前的WEB页,因此,一般将ActiveX文档(即HTML的标记OBJECT)放在一个独立的HTML文件中。例如,下面这条语句建立了一个超链接:A hRef=ActiveXDoc.htmLink to a ActiveX Document /A其中,ActiveXDoc.htm是下载ActiveX文档的HTML 文件:OBJECT classid=clsid:2F390484-1C7D-11D0-8908-00A0C90395F4 codebase=ActiveXDoc.cab#version=1,0,0,0/OBJECT这条语句将下载ActiveXDoc.cab,并在Windows注册表中注册该ActiveX文档。8. 小结正如Internet和WEB技术一样,ActiveX技术的发展日新月异,新的更强大的开发工具使 得服务器及客户端的应用开发、网站建设变得更简单,并容易扩展和重用。随着Microsoft的包括 Windows NT、Internet Information Server、Active Server Pages以及Microsoft FrontPage、Internet Explorer等组件在内完整的Internet解决方案被广泛使用,ActiveX技术将会有更 大的发展。参考文献:1. Visual C+技术内幕(第二版),美David J. Kruglinski著,王国印译,清华大学出 版社。2. ActiveX开发人员指南,美Eric Tall,Mark Ginsburg著,章巍等译,机械工业出 版社。3. Visual Basic 6.0:You Wont Believe What Just Hit the Web,Joshua Trupin, Microsoft Interactive Network Developer(MIND),1998年8月。4. Introduction to ActiveX Controls,Microsoft Corp.,MSDN,1998年8月。5. Dynamic HTML and the Big Picture,John Swenson,MSDN Online,1997年11月。 6. A Brief Preview of the Visual Basic 5.0 Development Environment,MichaelOtey,Windows NT Magazine ,1997年4月。JavaBean的属性JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量。在JavaBean设计中,按照属性的不同作用又细分为四类:Simple,Index,Bound与Constrained属性。3.1.1Simple属性一个简单属性表示一个伴随有一对get/set方法(C语言的过程或函数在Java程序中称为方法)的变量。属性名与和该属性相关的get/set方法名对应。例如:如果有setX和getX方法,则暗指有一个名为X的属性。如果有一个方法名为isX,则通常暗指X是一个布尔属性(即X的值为true或false)。例如在下面这个程序中:publicclassalden1extendsCanvasstringourString=Hello;/属性名为ourString,类型为字符串publicalden1()/alden1()是alden1的构造函数,与C+中构造函数的意义相同setBackground(Color.red);setForeground(Color.blue);/*set属性*/publicvoidsetString(StringnewString)ourString=newString;/*get属性*/publicStringgetString()returnourString;3.1.2Indexed属性一个Indexed属性表示一个数组值。使用与该属性对应的set/get方法可取得数组中的数值。该属性也可一次设置或取得整个数组的值。例:publicclassalden2extendsCanvasintdataSet=1,2,3,4,5,6;/dataSet是一个indexed属性publicalden2()setBackground(Color.red);setForeground(Color.blue);/*设置整个数组*/publicvoidsetDataSet(intx)dataSet=x;/*设置数组中的单个元素值*/publicvoidsetDataSet(intindex,intx)dataSetindex=x;/*取得整个数组值*/publicintgetDataSet()returndataSet;/*取得数组中的指定元素值*/publicintgetDataSet(intx)returndataSetx;3.1.3Bound属性一个Bound属性是指当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就点火一个PropertyChange事件(在Java程序中,事件也是一个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的Bean,至于接收事件的Bean应做什么动作由其自己定义。图3.1是一个简单Bound属性示意图,当PushButton的background属性与Dialog的background属性bind时,若PushButton的background属性发生变化时,Dialog的background属性也发生同样的变化。例:publicclassalden3extendsCanvasStringourString=Hello;/ourString是一个bound属性privatePropertyChangeSupportchanges=newPropertyChangeSupport(this);/*注:Java是纯面向对象的语言,如果要使用某种方法则必须指明是要使用哪个对象的方法,在下面的程序中要进行点火事件的操作,这种操作所使用的方法是在PropertyChangeSupport类中的。所以上面声明并实例化了一个changes对象,在下面将使用changes的firePropertyChange方法来点火ourString的属性改变事件。*/publicvoidsetString(stringnewString)StringoldString=ourString;ourString=newString;/*ourString的属性值已发生变化,于是接着点火属性改变事件*/changes.firePropertyChange(ourString,oldString,newString);publicStringgetString()returnourString;/*以下代码是为开发工具所使用的。我们不能预知alden3将与哪些其它的Bean组合成为一个应用,无法预知若alden3的ourString属性发生变化时有哪些其它的组件与此变化有关,因而alden3这个Bean要预留出一些接口给开发工具,开发工具使用这些接口,把其它的JavaBean对象与alden3挂接。*/publicvoidaddPropertyChangeListener(PropertyChangeLisenerl)changes.addPropertyChangeListener(l);publicvoidremovePropertyChangeListener(PropertyChangeListenerl)changes.removePropertyChangeListener(l);通过上面的代码,开发工具调用changes的addPropertyChangeListener方法把其它JavaBean注册入ourString属性的监听者队列l中,l是一个Vector数组,可存储任何Java对象。开发工具也可使用changes的removePropertyChangeListener方法,从l中注销指定的对象,使alden3的ourString属性的改变不再与这个对象有关。当然,当程序员手写代码编制程序时,也可直接调用这两个方法,把其它Java对象与alden3挂接。3.1.4Constrained属性一个JavaBean的constrained属性,是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它Java对象可否决属性值的改变。constrained属性的监听者通过抛出PropertyVetoException来阻止该属性值的改变。过程如图3.2例:下面程序中的constrained属性是PriceInCents。publicclassJellyBeanextendsCanvasprivatePropertyChangeSupportchanges=newPropertyChangeSupport(this);privateVetoableChangeSupportVetos=newVetoableChangeSupport(this);/*与前述changes相同,可使用VetoableChangeSupport对象的实例Vetos中的方法,在特定条件下来阻止PriceInCents值的改变。*/.publicvoidsetPriceInCents(intnewPriceInCents)throwsPropertyVetoException/*方法名中throwsPropertyVetoException的作用是当有其它Java对象否决PriceInCents的改变时,要抛出例外。*/*先保存原来的属性值*/intoldPriceInCents=ourPriceInCents;/*点火属性改变否决事件*/vetos.fireVetoableChange(priceInCents,newInteger(OldPriceInCents),newInteger(newPriceInCents);/*若有其它对象否决priceInCents的改变,则程序抛出例外,不再继续执行下面的两条语句,方法结束。若无其它对象否决priceInCents的改变,则在下面的代码中把ourPriceIncents赋予新值,并点火属性改变事件*/ourPriceInCents=newPriceInCents;changes.firePropertyChange(priceInCents,newInteger(oldPriceInCents),newInteger(newPriceInCents);/*与前述changes相同,也要为PriceInCents属性预留接口,使其它对象可注册入PriceInCents否决改变监听者队列中,或把该对象从中注销publicvoidaddVetoableChangeListener(VetoableChangeListenerl)vetos.addVetoableChangeListener(l);publicvoidremoveVetoableChangeListener(VetoableChangeListenerl)vetos.removeVetoableChangeListener(l);.从上面的例子中可看到,一个constrained属性有两种监听者:属性变化监听者和否决属性改变的监听者。否决属性改变的监听者在自己的对象代码中有相应的控制语句,在监听到有constrained属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。总之,某个Bean的constrained属性值可否改变取决于其它的Bean或者是Java对象是否允许这种改变。允许与否的条件由其它的Bean或Java对象在自己的类中进行定义。JavaBean的事件事件处理是JavaBean体系结构的核心之一。通过事件处理机制,可让一些组件作为事件源,发出可被描述环境或其它组件接收的事件。这样,不同的组件就可在构造工具内组合在一起,组件之间通过事件的传递进行通信,构成一个应用。从概念上讲,事件是一种在源对象和监听者对象之间,某种状态发生变化的传递机制。事件有许多不同的用途,例如在Windows系统中常要处理的鼠标事件、窗口边界改变事件、键盘事件等。在Java和JavaBean中则是定义了一个一般的、可扩充的事件机制,这种机制能够:对事件类型和传递的模型的定义和扩充提供一个公共框架,并适合于广泛的应用。与Java语言和环境有较高的集成度。事件能被描述环境捕获和点火。能使其它构造工具采取某种技术在设计时直接控制事件,以及事件源和事件监听者之间的联系。事件机制本身不依赖于复杂的开发工具。特别地,还应当:能够发现指定的对象类可以生成的事件。能够发现指定的对象类可以观察(监听)到的事件。提供一个常规的注册机制,允许动态操纵事件源与事件监听者之间的关系。不需要其它的虚拟机和语言即可实现。事件源与监听者之间可进行高效的事件传递。能完成JavaBean事件模型与相关的其它组件体系结构事件模型的中立映射。3.2.1概述JavaBean事件模型的总体结构图见图3.3,主要构成有:事件从事件源到监听者的传递是通过对目标监听者对象的Java方法调用进行的。对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承java.util.EventListener。实现了事件监听者接口中一些或全部方法的类就是事件监听者。伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject。事件状态对象作为单参传递给应响应该事件的监听者方法中。发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册方法,并接受对指定事件监听者接口实例的引用。有时,事件监听者不能直接实现事件监听者接口,或者还有其它的额外动作时,就要在一个源与其它一个或多个监听者之间插入一个事件适配器类的实例,来建立它们之间的联系。3.2.2事件状态对象(EventStateObject)与事件发生有关的状态信息一般都封装在一个事件状态对象中,这种对象是java.util.EventObject的子类。按设计习惯,这种事件状态对象类的名应以Event结尾。例如:publicclassMouseMovedExampleEventextendsjava.util.EventObjectprotectedintx,y;/*创建一个鼠标移动事件MouseMovedExampleEvent*/MouseMovedExampleEvent(java.awt.Componentsource,Pointlocation)super(source);x=location.x;y=location.y;/*获取鼠标位置*/publicPointgetLocation()returnnewPoint(x,y);3.2.3事件监听者接口(EventListenerInterface)与事件监听者由于Java事件模型是基于方法调用,因而需要一个定义并组织事件操纵方法的方式。JavaBean中,事件操纵方法都被定义在继承了java.util.EventListener类的EventListener接口中,按规定,EventListener接口的命名要以Listener结尾。任何一个类如果想操纵在EventListener接口中定义的方法都必须以实现这个接口方式进行。这个类也就是事件监听者。例如:/*先定义了一个鼠标移动事件对象*/publicclassMouseMovedExampleEventextendsjava.util.EventObject/在此类中包含了与鼠标移动事件有关的状态信息./*定义了鼠标移动事件的监听者接口*/interfaceMouseMovedExampleListenerextendsjava.util.EventListener/*在这个接口中定义了鼠标移动事件监听者所应支持的方法*/voidmouseMoved(MouseMovedExampleEventmme);在接口中只定义方法名,方法的参数和返回值类型。如:上面接口中的mouseMoved方法的具体实现是在下面的ArbitraryObject类中定义的。classArbitraryObjectimplementsMouseMovedExampleListenerpublicvoidmouseMoved(MouseMovedExampleEventmme).ArbitraryObject就是MouseMovedExampleEvent事件的监听者。3.2.4事件监听者的注册与注销为了各种可能的事件监听者把自己注册入合适的事件源中,建立源与事件监听者间的事件流,事件源必须为事件监听者提供注册和注销的方法。在前面的bound属性介绍中已看到了这种使用过程,在实际中,事件监听者的注册和注销要使用标准的设计格式:publicvoidadd(listener);publicvoidremove(listener);例如:首先定义了一个事件监听者接口:publicinterfaceModelChangedListenerextendsjava.util.EventListenervoidmodelChanged(EventObjecte);接着定义事件源类:publicabstractclassModelprivateVectorlisteners=newVector();/定义了一个储存事件监听者的数组/*上面设计格式中的在此处即是下面的ModelChangedListener*/publicsynchronizedvoidaddModelChangedListener(ModelChangedListenermcl)listeners.addElement(mcl);/把监听者注册入listeners数组中publicsynchronizedvoidremoveModelChangedListener(ModelChangedListenermcl)listeners.removeElement(mcl);/把监听者从listeners中注销/*以上两个方法的前面均冠以synchronized,是因为运行在多线程环境时,可能同时有几个对象同时要进行注册和注销操作,使用synchronized来确保它们之间的同步。开发工具或程序员使用这两个方法建立源与监听者之间的事件流*/protectedvoidnotifyModelChanged()/*事件源使用本方法通知监听者发生了modelChanged事件*/Vectorl;EventObjecte=newEventObject(this);/*首先要把监听者拷贝到l数组中,冻结EventListeners的状态以传递事件。这样来确保在事件传递到所有监听者之前,已接收了事件的目标监听者的对应方法暂不生效。*/synchronized(this)l=(Vector)listeners.clone();for(inti=0;il.size();i+)/*依次通知注册在监听者队列中的每个监听者发生了modelChanged事件,并把事件状态对象e作为参数传递给监听者队列中的每个监听者*/(ModelChangedListener)l.elementAt(i).modelChanged(e);在程序中可见事件源Model类显式地调用了接口中的modelChanged方法,实际是把事件状态对象e作为参数,传递给了监听者类中的modelChanged方法。3.2.5适配类适配类是Java事件模型中极其重要的一部分。在一些应用场合,事件从源到监听者之间的传递要通过适配类来转发。例如:当事件源发出一个事件,而有几个事件监听者对象都可接收该事件,但只有指定对象做出反应时,就要在事件源与事件监听者之间插入一个事件适配器类,由适配器类来指定事件应该是由哪些监听者来响应。图3.4是适配类模型的框架:从上图中可见,适配类成为了事件监听者,事件源实际是把适配类作为监听者注册入监听者队列中,而真正的事件响应者并未在监听者队列中,事件响应者应做的动作由适配类决定。目前绝大多数的开发工具在生成代码时,事件处理都是通过适配类来进行的。JavaBean用户化JavaBean开发者可以给一个Bean添加用户化器(Customizer)、属性编辑器(PropertyEditor)和BeanInfo接口来描述一个Bean的内容,Bean的使用者可在构造环境中通过与Bean附带在一起的这些信息来用户化Bean的外观和应做的动作。一个Bean不必都有BeanCustomizer、PrpertyEditor和BeanInfo,根据实际情况,这些是可选的,当有些Bean较复杂时,就要提供这些信息,以Wizard的方式使Bean的使用者能够用户化一个Bean。有些简单的Bean可能这些信息都没有,则构造工具可使用自带的透视装置,透视出Bean的内容,并把信息显示到标准的属性表或事件表中供使用者用户化Bean,前几节提到的Bean的属性、方法和事件名要以一定的格式命名,主要的作用就是供开发工具对Bean进行透视。当然也是给程序员在手写程序中使用Bean提供方便,使他能观其名、知其意。3.3.1用户化器接口(CustomizerInterface)当一个Bean有了自己的用户化器时,在构造工具内就可展现出自己的属性表。在定义用户化器时必须要实现java.beans.Customizer接口。例如,下面是一个按钮Bean的用户化一器:publicclassOurButtonCustomizerextendsPanelimplementsCustomizer./*当实现象OurButtonCustomizer这样的常规属性表时,一定要在其中实现addProperChangeListener和removePropertyChangeListener,这样,构造工具可用这些功能代码为属性事件添加监听者。*/.privatePropertyChangeSupportchanges=newPropertyChangeSupport(this);publicvoidaddPropertyChangeListener(PropertyChangeListenerl)changes.addPropertyChangeListener(l);publicvoidremovePropertyChangeListener(PropertyChangeListenerl)changes.removePropertyChangeListener(l);.3.3.2属性编辑器接口(PropertyEditorInterface)一个JavaBean可提供PropertyEditor类,为指定的属性创建一个编辑器。这个类必须继承自java.beans.PropertyEditorSupport类。构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮行业中式烹调师职业资格考试(实操技能)试题及答案
- 无人机理论试题及答案
- 三观标准题目及答案
- 土木工程师(土建)2025年施工技术试卷
- 桥梁工程创新技术与未来发展试题及答案
- 青岛大学开题报告模板
- 水电气考试题库及答案
- 2025年山西长治市屯留县保安员招聘考试题库附答案解析
- 2025年北京市北京市大兴区保安员招聘考试题库附答案解析
- 2025年土建考试题库及答案(可下载)
- 《2025年健康体检服务合同协议》
- 2025河南省农业信贷担保有限责任公司秋季专场招聘28人考试笔试备考试题及答案解析
- 西藏养老护理考试题库大全及答案解析
- 2025年河北省高职单招考试六类职业适应性测试(综合)
- 2025消防宣传月专题培训
- 水冷无功补偿安置施工方案
- 村报账员基础知识培训课件
- 企业风险管理评估表全面覆盖版
- 烟叶种植基础知识培训课件
- 2025内初班语文试卷及答案
- 园林机械维修培训知识课件
评论
0/150
提交评论