11.1 Swing 用户界面组件

11.1 Swing和模型-视图-控制器设计模式

构成用户界面组件得各个组成部门,如按钮,复选框,文本域,或复杂的树控件。每个组件都有三个特征:

  1. 内容,如,按钮的状态(是否按下),或者文本域中得文本
  2. 外观(颜色,大小等)。
  3. 行为(对事件的反应)

Swing设计者采用了一种很有名的设计模式:模型-视图-控制器模式。
这种设计模式要求我们提供三个不同的对象:

  1. 模型:存储内容
  2. 视图:显示内容
  3. 控制器:处理用户输入

这种设计模式明确规定了三个对象如何交互。
模型存储内容,它没有用户界面。
按钮的内容非常简单,只有很少的一组标志,用来表示按钮是否按下,是否处于活动状态等等。
文本域保存当前文本的一个字符串对象。如果内容的长度大于文本域的大小,用户就只能看到文本域可以现实的那一部分
== 模型必须实现改变内容和查找内容的方法==
模型是完全不可见的显示存储在模型中的数据是视图的工作。

在设计模式中,模型存储完整的内容,视图给出(完整的或者不完整的)可视化显示。

模型-视图-控制器模式的一个优点是,一个模型可以有多个视图,其中每个视图都可以显示全部内容的的不同部分或不同方面。

当通过某一个视图的控制器对模型进行更新时,模型会通知关联的两个视图发生了改变,视图得到通知后会自动的刷新

控制器负责处理用户输入事件,如点击鼠标和按键。然后决定是否把这些事件转化为模型或视图的更改。

例如一个文本框中按下了一个字符键,控制器用模型的“插入字符”的命令,然后模型告诉试图进行更新,而试图永远不会知道文本为什么改变了。但是如果用户按下了一个箭头键,那么控制器会通知视图滚动。滚动视图对底层的文本不会有任何影响,因此模型永远不会知道这个事件的发生。

模型,视图,控制器对象之间的交互
在这里插入图片描述
大多数的Swing组件,模型类将实现一个名字以Model结尾的接口,在这里接口就名为:ButtonModel接口,实现了此接口的类可以定义各种按钮的状态,另外Swing库中有一个名为DefaultButtonModel的类实现了这个接口
可以通过接口的属性来了解按钮维护着什么类型的数据

ButtonModel接口的属性

属性名
actionCommand与按钮关联的动作命令字符串
mnemonic按钮的助记快捷键
armed如果按钮按下且鼠标仍在按钮上则为true
enabled如果按钮时可选择的则为true
pressed如果按钮按下且鼠标案件没有释放则为true
rollover如果鼠标在按钮上则为true
selected如果按钮已经被选择(用于复选框或者单选按钮)则为true

每个JButton对象都存储这一个按钮的模型的对象,可以如下访问:

var button=new JButton("Blue");
ButtonMode model=button.getModel();

JButton类用BasicButttonUI类作为其视图,用ButtonUIListener类作为其控制器。通常每个Swing组件都有一个相关的后缀为UI的视图对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值