




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第11章 JavaBean组件技术,2,主要内容,JavaBean概述 JavaBean属性 JavaBean事件 JavaBean示例,计算机科学与技术系,3,11.1 JavaBean概述,11.1.1 JavaBean产生的背景,软件工业在不断地寻求成本低廉而又快速可靠地软件开发方法,90年代末期,基于组件的软件开发思想开始得到了普遍的重视和应用。 组件: 有一组方法和方法的运行需要的一组数据,经过封装,就变成了组件。 与类的区别:类是以源码形式存在的,而组件是以二进制可执行码存在的,是封装了的结果。 JavaBean就是一种基于Java平台的软件组件思想,也是一种独立于平台和结构的应用程序编程接口(API),是描述java的软件组件模型。,计算机科学与技术系,4,11.1 JavaBean概述,11.1.2 JavaBean基本概念,JavaBean:是一种遵守某种严格协议的Java类,是跨平台、可重用的Java组件,通过JavaBean 的组合可以快速生成新的应用程序。 作用:为了提高代码的复用性 应用领域:JavaBean主要应用在可视化集成领域,现在也被广泛应用于非可视化领域。 优点:”wirte once,run anywhere,reuse everywhere”,计算机科学与技术系,5,11.1 JavaBean概述,11.1.3 JavaBean的构成,属性(特征):即成员变量,用来描述状态 方法:通过规范的方法读写JavaBean的成员变量。 事件:JavaBean属性的改变就激发JavaBean事件,主要用于JavaBean间的通信。 说明: 类中方法的访问权限都必须是public的。 类中成员变量的访问权限都必须是缺省或private的。 类中如果有构造方法,那么这个构造方法也是public的并且是无参数的,6,在JavaBean设计中,按照属性的不同作用又分为四类:简单属性、索引属性、关联属性和限制属性。 12.1 简单属性(Simple Property),计算机科学与技术系,11.2 JavaBean属性,采用单一值(比如一个字符串或一个数字)的属性。 在运行时可以通过get/set方法取得或设置。 例:ImageViewerBean的fileName属性,import java.awt.*; public class SimpleAttrBean String outString=“hello“; public void setString(String newString) outString=newString; public String getString() return outString; ,7,11.2 JavaBean属性,11.2.1 简单属性(Simple Property),而对于boolean类型的特征,则应使用is/set方法。 例: 只读属性,public void setPorpertyName(boolean b) public boolean isPropertyName(),计算机科学与技术系,public Dimension getPreferredSize(),8,11.2 JavaBean属性,11.2.2 索引属性(Indexed Property),一个Indexed属性表示一个数组值。 必须提供两对set/get方法,一对为了数组,另一对为了单个元素。 ArrayIndexOutOfBoundsException异常 常用于数据点, 例:,计算机科学与技术系,/ChatBean.java public double getValues() return values; public void setValues(double v) values = v; public double getValues(int i) return valuesi; public void setValues(int i, double v) valuesi = v; ,/ChartBean.java public double getValues() return values; public void setValues(double v) values = v; public double getValues(int i) if(i =0 ,9,计算机科学与技术系,11.2 JavaBean属性,11.2.3 关联属性(Bound Property),是指当其值发生变化时,可以自动向其他与它相关的Bean和容器发出通知。 要实现一个关联属性,必须实现以下两个机制:,void addPropertyChangeListener( PropertyChangeListener listener); void removePropertyChangeListener( PropertyChangeListener listener);,1) 每当属性值发生改变时,bean必须给所有注册监听器发送一个PropertyChange事件。 2) 要使有关的监听器能够对自己进行注册,bean必须实现以下两个方法:,10,9.2 JavaBean特征,9.2.3 关联特征(Bound Property),PropertyChangeSupport类 用于管理监听器。可以使用此类的实例作为 bean 的成员字段,并将各种工作委托给它。 此类是可序列化的,构造方法: public PropertyChangeSupport(Object sourceBean); 主要方法:,addPropertyChangeListener(PropertyChangeListener l) /在监听者列表中,加入一个 PropertyChangeListener firePropertyChange(String, Object, Object) /*报告用于更新任何注册监听者的一个绑定属性。若旧的和新的相等且为非空,则不激发事件。 */ removePropertyChange(PropertyChangeListener l) /从监听者列表中,删除一个PropertyChangeListener,计算机科学与技术系,11,9.2 JavaBean特征,9.2.3 关联特征(Bound Property),PropertyChangeListener接口 PropertyChangeEvent类 PropertyChangeEvent对象负责封装属性的新值和老值。,void propertyChange(PropertyChangeEvent event),Object oldValue = event.getOldValue(); Object newValue = event.getNewValue();,计算机科学与技术系,12,9.2 JavaBean特征,9.2.3 关联特征(Bound Property),关联属性的编程实现是: (1) 监听者注册/撤销,/如果要使用PropertyChangeSupport类管理监听器,则 /首先为你的bean必须配备一个该类的实例对象作为成员。 private PropertyChangeSupport changes = new PropertyChangeSupport(this); /然后将增加和删除属性变更监听器的任务委托给该对象。 public void addPropertyChangeListener(PropertyChangeListener l) changes.addPropertyChangeListener(l); public void removePropertyChangeListener(PropertyChangeListener l) changes.removePropertyChangeListener(l); changes.firePropertyChange(“fileName“, oldValue, newValues);,changes.firePropertyChange (“running“, new Boolean(false), new Boolean(true);,13,9.2 JavaBean特征,9.2.3 关联特征(Bound Property),import java.awt.* ; import java.beans.* ; import javax.swing.*; public class FileNameBean extends JPanel implements Serializable private JTextField nameField; private PropertyChangeSupport changes = new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener l) changes.addPropertyChangeListener(l); public void removePropertyChangeListener(PropertyChangeListener l) changes.removePropertyChangeListener(l); public String getFileName() return nameField.getText(); public void setFileName(String newValues) String oldValue = nameField.getText(); nameField.setText(newValues); changes.firePropertyChange(“fileName“, oldValue, ewValues); ,14,11.2 JavaBean属性,11.2.3 关联属性(Bound Property),关联特征也支持特定属性的事件监听方法: 例:有一个名为Name的关联属性,则,addListener(); removeListener();,public void addNameListener(PropertyChangeListener l); public void removeNameListener(PropertyChangeListener l);,public void addPropertyChangeListener( String propertyName, PropertyChangeListener listener); public void removePropertyChangeListener( String propertyName, PropertyChangeListener listener);,15,计算机科学与技术系,11.2 JavaBean属性,11.2.4 限制属性(Constrained Property),是指属性值在被修改后,与相关的外部类对象有能力拒绝被设置为某个数值的属性。又称为约束属性。 PropertyVetoException异常 注册/注销监听器的方法:,void addVetoableChangeListener( VetoableChangeListener listener); void removeVetoableChangeListener( VetoableChangeListener listener);,16,计算机科学与技术系,11.2 JavaBean属性,11.2.4 限制属性(Constrained Property),VetoableChangeSupport类 VetoableChangeListener接口 VetoableChangeEvent类,17,计算机科学与技术系,11.2 JavaBean属性,11.2.4 限制属性(Constraned Property),若要更新限制属性的值,bean使用下面方法:,1) 将修改属性值的意图通知所有的可否决变更监听器(使用VetoableChangeSupport类的fireVetoableChange方法) 2) 如果所有的可否决变更监听器都没有抛出PropertyVetoException异常,那么就更新属性的值。 3) 通知所有的属性变更监听器,确认修改已经发生。,18,9.2 JavaBean特征,9.2.3 关联特征(Bound Property),/IntTextBean.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.beans.*; import java.io.*; public class IntTextBean extends JTextField public IntTextBean() super(“0”, TEXTSIZE); addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) ); addFocusListener(new FocusListener() public void focusGained(FocusEvent event) public void focusLost(FocusEvent event) ); ,19,9.2 JavaBean特征,9.2.3 关联特征(Bound Property),public void setValue(int v) throws PropertyVetoException Integer oldValue = new Integer(getValue(); Integer newValue = new Integer(v); fireVetoableChange(“value”, oldValue, newValue); setText(“” + v); firePropertyChange(“value”, oldValue, newValue); public int getValue() try return Integer.parseInt(getText(); catch(NumberFormatException e) return 0; ,20,9.2 JavaBean特征,9.2.3 关联特征(Bound Property),/RangeBean.java import java.awt.*; import javax.swing.*; import java.beans.*; import java.io.*; public class RangeBean extends JPanel private IntTextBean from = new InetTextBean(); private IntTextBean to = new InetTextBean(); public RangeBean() add(new JLabel(“From”); add(from); add(new JLabel(“To”); add(to);,21,9.2 JavaBean特征,9.2.3 关联特征(Bound Property),from.addVetoableChangeListener( new VetoableChangeListener public void vetoableChange(PropertyChangeEvent e) throws PropertyVetoException int v = (Integer)e.getNewValue().intValue(); if(v to.getValue() throw new PropertyVetoException(“fromto”, e); ); to.addVetoableChangeListener( new VetoableChangeListener public void vetoableChange(PropertyChangeEvent e) throws PropertyVetoException int v = (Integer)e.getNewValue().intValue(); if(v from.getValue() throw new PropertyVetoException(“tofrom”, e); ); ,22,计算机科学与技术系,11.2 JavaBean属性,11.2.4 限制属性(Constraned Property),限制属性也支持单个属性的事件监听方法。(注意参数的不同) 下面是一个例子,有一名为Name的限制特征:,public void addNameListener(VetoableChangeListener l); public void removeNameListener(VetoableChangeListener l);,public void addVetoableChangeListener( Sting propertyName, VetoableChangeListener listener); public void removeVetoableChangeListener( Sting propertyName, VetoableChangeListener listener);,23,9.2 JavaBean特征,9.2.3 关联特征(Bound Property),/限制属性类示例: import java.awt.* ; import java.beans.* ; public class ConstrainedProperty extends Panel private VetoableChangeSupport vetos = new VetoableChangeSupport(this); private String strVar = “100”; /strVar为限制属性 public ConstrainedProperty() public String getStrVar() return strVar; ,24,9.2 JavaBean特征,9.2.3 关联特征(Bound Property),/写限制特征,如不同意修改抛出PropertyVetoException异常 public void setStrVar(String newStrVar) throws PropertyVetoException String oldStrVar = strVar; vetos.fireVetoableChange(“strVar”, new String(oldStrVar), new String(newStrVar); strVar = newStrVar; public void addVetoableChangeListener(VetoableChangeListener l) vetos.addVetoableChangeListener(l); public void removeVetoableChangeListener(VetoableChangeListener l) vetos.removeVetoableChangeListener(l); ,25,11.3.1 JavaBean事件处理模型,11.3 JavaBean事件,JavaBean的事件机制,就是把对象的状态改变通知给其它相关对象以进行适当处理的机制。 是一种在“源对象”和“监听者”之间,某种属性发生变化的传递机制。 JavaBean的事件处理模型类似于AWT事件模型。 JavaBean事件处理模型:,计算机科学与技术系,26,计算机科学与技术系,11.3 JavaBean事件,JavaBean事件模型,JavaBean事件模型的总体结构图:,27,11.3 JavaBean事件,11.3.2 JavaBean事件模型的实现,定制JavaBean事件和事件监听器 如何编写能够生成定制事件的JavaBean:,1)建立自定义事件CustomEvent类,它继承EventObject (事件名必须以Event结尾)。 2)编写一个带有一个或多个通知方法的事件监听接口CustomListener,这些方法可以使用任意名字,但它们必须有一个类型为CustomEvent的单个参数,并且它的返回类型是void的成员方法。 3)定义事件监听者来实现监听者接口。 4)设计JavaBean作为事件源,并在其中提供以下两个方法:,计算机科学与技术系,void addCustomListener(CustomListener listener); void removeCustomListener(CustomListener listener);,28,11.4 JavaBean示例,11.4.1 一个简单的JavaBean例子,1. 建立Bean的一般过程: 1) 编写Bean的源程序SimpleBean.java。 2) 编译源程序。 3) 编写声明文件manifest。 4) 创建JAR文件。,计算机科学与技术系,29,9.3.1 JavaBean事件模型,import java.awt.*; import java.io.Serializable; public class SimpleBean extends Canvas implements Serializable /*该bean从java.awt.Canvas派生,所以具有了Canvas的所有属性和方法 */ public SimpleBean() setSize(100,100); /设置该bean的尺寸 setBackground(Color.red); /设置该bean的背景颜色 ,JavaBean的源程序SimpleBean.java如下:,30,11.4 JavaBean示例,11.4.1 一个简单的JavaBean例子,2. 声明文件 3. 创建JAR文件,计算机科学与技术系,Manifest-Version: 1.0 Name: JavaBeanName.class JavaBean: True,jar ctxvfm jar-file manifest-file files 例: jar cvfm SimpleBean.j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高级水育考试题及答案
- 飞机培训考试题目及答案
- 繁星中招考试题及答案
- 法医临床考试题目及答案
- 电站会计考试题及答案大全
- 电缆焊接考试题及答案解析
- 电大刑法考试题及答案
- 蒂森电梯考试题及答案
- 地震科目四考试题及答案
- 2025年中国饲料香精项目创业投资方案
- 硝酸铵生产培训课件
- 政协提案知识及撰写培训课件
- 2024-2025学年广东省深圳市宝安区高二上学期期末调研测试数学试题(解析版)
- 2025年互联网保险市场国际化发展策略研究报告
- 2025年-中华民族共同体概论-第十五讲 新时代与中华民族共同体建设(2012- )
- 酒店职业安全培训内容课件
- 2023年广州天河区小升初民校密考卷六年级英语
- 正弦波永磁同步电动机的自控变频调速系统课件
- 家务劳动我能行课件
- 五年级上册数学课件-第1节 比较图形的面积丨北师大版 (共17张PPT)
- 说明书hid500系列变频调速器使用说明书s1.1(1)
评论
0/150
提交评论