转自:http://blog.csdn.net/tuxq5721/article/details/17290809
?
?Swing原先是利用MVC(Model -View -Controller)的概念衍生而出。
Swing组件的Model可分成3类。
?
Swing原先是利用MVC(Model -View -Controller)的概念衍生而出
Model
???????? 存储组件数据。例如JCheckBox中的Model将存储所有选项的值,并以Boolean值来表示,而JTable的Model则会存储所有表格上的数据。
View
???????? 显示组件的外观。
Controller
???????? 处理用户在组件上的操作,并将改变后的数据存储在Model中。
???????? 由于MVC具有清楚的模块结构,因此Swing在设计上也遵循这样的概念,但做了一点小小的改变。原先独立出现的View与Controller在Swing中是将它合并在一起的,并称为委托式UI界面(UI-delegate),原因是Swing的发展小组认为这两都具有紧密的相关性,若分开设计并没有太多的好处,且会提高设计上的难度。所以,原先的MVC结构就被更改成M-UI结构。
?
Swing组件的Model可分成3类
第一种:存储组件内将被用来操作的数据。
???????? 该模式最常被用来显示不同的数据显示方式,如TableModel、ListModel、ComboBoxModel、Document等。TableModel是存储JTable上所有字段的数据,ListModel是存储JList上所有项目的数据,Document是存储文字输入组件(JTextField、JTextArea等)内的所有内容。
第二种:存储控制组件操作模式的数据。
??? 例如在JList或JTable中,我们可以使用ListSelectionModel来决定用户一次是否能选择多列的数据,或是JTable的TableColumnModel可用来设置JTable中每个单元格的组件类型(如 JTextField 或 JComboBox 等)。
第三种:存储组件本身性质的数据模式。
??? 例如JSlider或JProgressBar组件都有minimun、maximun、extent与value四个参数值,用来代表组件的最小值、最大值、延伸区值与初始设置值,这四个参数值存储在BoundedRangeModel中。
???????? 当用户与界面有任何交互时,所有改变的值会更改至Model中原有设置的数据,此时Controller会负责调用更改画面与变更Model数据的操作。
?