Swing中的MVC(转)

Swing并非严谨地基于MVC的传统形式,它将View和Controller坍塌(collapse)成为一个,但保持Model是分离的。Swing的创始者选择这种简化设计,是为了处理组件里经常出现的View和Controller之间交互的复杂性。插图1.3提供了Swing坍塌式MVC设计的简化表示。合并的View-Controller被称为UI托管(UI delegate)。每个Swing组件都有一个托管对象(delegate object)来负责渲染组件的View,以及处理用户的输入事件。UI管理器是托管的扩展,它从全局管理应用中组件的外观和风格。

将Swing组件和MVC模式付诸实践的一个简单而具体的例子,就是JTextField——允许输入一行文本的文本组件。插图1.4给出了JTextField的简化表示。该组件的UI托管是BasicTextFieldUI,默认的Model是PlainDocument(它最终实现了Document接口)。

插图1.3 Swing中修改了的MVC

插图1.4 JTextField组件

JTextField组件的创建非常直截了当。如果你不指定Model,就会创建一个默认的Model,并且基于当前的外观与风格,在内部指派一个UI托管。

JTextFiled textField = new JTextField();

你可以在创建组件时,通过使用另外的构造函数为它指定自定义的Model。以JTextField为例,这个自定义Model必须实现Document接口。

JTextField textField = new JTextField (new MyCustomDocument());

创建组件后,你可以得到Model和UI托管的完全访问权。要访问JTextField的Model,可以使用下列方法:

Document textDoc = textFiled.getDocument();

TextField.setDocument (new MyCustomDocument());

其它组件通常使用getModel()和setModel(…),但结果是一样的——你能够访问组件身后的Model了。

要访问JTextField的UI托管,可以使用下列方法:

TextUI textUI = textField.getUI();

TextField.setUI (new MyCustomTextUI());

访问其它组件的UI托管与之非常类似。现在,你可以访问组件的各种property。其它组件如JTable和JTree,其创建并非如此简单,但依然遵循UI托管的设计。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值