Swing框架之Model - 编程入门网
据的接口,比如表格中的数据,或 列表显示的选项。这些数据模型为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组件必须提供访问修改模型的set/get方法,即模型必须是 该组件的限定性属性。比如,JSlider使用BoundedRangeModel接口作为它的模型 定义,因此它必须提供下面方法:
所有Swing组件有一个共同点:如果你不设置它的模型,组件会在内部创建/ 安装一个缺省模型。这些缺省模型类的命名习惯是在接口名称之前加上 “Default”,比如JSlider的构造函数中初始化一个 DefaultBoundedModel对象。
如果程序接着调用setModel(),缺省的模型就被替换了,比如下面例子:
对于更复杂的模型(如JTable和JList),Swing还提供一个抽象模型实现, 让开发者不需要从头开始创建自己的模型。 如JList的模型接口是ListModel,Swing同时提供了DefaultListModel和 AbstractListModel两个类来协助开发者创建自定义的列表模型。 模型改变通知 当数据或者发生变动时,模型必须通知所有相关方(比如视图)。Swing模型 使用前面文章所讲述的事件模型来实现这种触发。Swing中有两种方法发送这种 通知: 发送轻量级通知,表明状态已经改变,需要Listener通过查询模型,发现什 么改变了并做出响应。此方法的优点是单独事件实例能用作该模型的所有通知, 同时对于需要频繁通知的事件非常有用(比如JScrollBar被拖动时)。 发送状态化通知,详细描述模型如何改变。这种方法需要为每个通知创建一 个新的事件实例。当通知通过查询模型不能有效地给Listener提供足够的信息时 ,此方法非常有用。比如当JTable的一列表格数据发生改变时。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |