快速业务通道

Swing框架之Model - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
据的接口,比如表格中的数据,或 列表显示的选项。这些数据模型为Swing提供了一个清晰分割应用程序界面和数 据逻辑的强大编程模式。对于以数据为核心的Swing组件,比如JTree和JTable, 强烈推荐使用数据模型进行交互。

当然一些组件的模型根据应用场景的不同其分类介于GUI状态模型和应用数据 模型之间,比如JSlider和JProgressBar 的BoundedRangeModel。

Swing的可分离模型接口并没有明确界定GUI状态模型和应用数据模型。这儿 所以做此说明,目的是让你更好的理解何时以及为何要需要使用分离的模型。

Swing框架之Model(2)

时间:2011-06-19 BlogJava zht

共享模型定义

值得注意的是,上文中表格中,许多组件的数据抽象相似,只需一个接口而 不用过分泛化时,组件可以共享同一模型定义。共享模型定义允许在不同组件之 间自动连接。比如,JSlider和JScrollBar都使用BoundedRangeModel接口,因此 可以在一个JScrollBar和一个JSlider之间共享同一个BoundedRangeModel实例, 这样它们之间的状态就总是同步的。

Swing框架之Model - 编程入门网

分离模型编程接口

使用模型的Swing组件必须提供访问修改模型的set/get方法,即模型必须是 该组件的限定性属性。比如,JSlider使用BoundedRangeModel接口作为它的模型 定义,因此它必须提供下面方法:

  public BoundedRangeModel getModel()   publicvoidsetModel(BoundedRangeModelmodel)

所有Swing组件有一个共同点:如果你不设置它的模型,组件会在内部创建/ 安装一个缺省模型。这些缺省模型类的命名习惯是在接口名称之前加上 “Default”,比如JSlider的构造函数中初始化一个 DefaultBoundedModel对象。

public JSlider(int orientation, int min, int max, intvalue){  checkOrientation(orientation);   this.orientation = orientation;   this.model = newDefaultBoundedRangeModel(value, 0, min, max);   this.model.addChangeListener(changeListener);  updateUI(); }

如果程序接着调用setModel(),缺省的模型就被替换了,比如下面例子:

JSlider slider = new JSlider(); BoundedRangeModel myModel = new DefaultBoundedRangeModel() {    public void setValue(int n){      System.out.println("SetValue: "+ n);      super.setValue(n);    }   }); slider.setModel(myModel);

对于更复杂的模型(如JTable和JList),Swing还提供一个抽象模型实现, 让开发者不需要从头开始创建自己的模型。

如JList的模型接口是ListModel,Swing同时提供了DefaultListModel和 AbstractListModel两个类来协助开发者创建自定义的列表模型。

模型改变通知

当数据或者发生变动时,模型必须通知所有相关方(比如视图)。Swing模型 使用前面文章所讲述的事件模型来实现这种触发。Swing中有两种方法发送这种 通知:

发送轻量级通知,表明状态已经改变,需要Listener通过查询模型,发现什 么改变了并做出响应。此方法的优点是单独事件实例能用作该模型的所有通知, 同时对于需要频繁通知的事件非常有用(比如JScrollBar被拖动时)。

发送状态化通知,详细描述模型如何改变。这种方法需要为每个通知创建一 个新的事件实例。当通知通过查询模型不能有效地给Listener提供足够的信息时 ,此方法非常有用。比如当JTable的一列表格数据发生改变时。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号