Swing框架之Model2011-06-19 BlogJava zht构建应用程序应该以数据为中心,而不是以用户界面为中心,这是一个良好 的编程习惯。为支持这种编程范式,Swing为每种带有逻辑数据或值的组件定义 了独立的模型接口,这种分割使程序可以选择向Swing组件中嵌入自己的模型实 现。下面表格列出Swing中组件及其模型的映射关系:
| 组件 | Model接口 | Model类型 |
| JButton | ButtonModel | GUI状态 |
| JToggleButton | ButtonModel | GUI状态/应用数据 |
| JCheckBox | ButtonModel | GUI状态/应用数据 |
| JRadioButton | ButtonModel | GUI状态/应用数据 |
| JMenu | ButtonModel | GUI状态 |
| JMenuItem | ButtonModel | GUI状态 |
| JCheckBoxMenuItem | ButtonModel | GUI状态/应用数据 |
| JRadioButtonMenuItem | ButtonModel | GUI状态/应用数据 |
| JComboBox | ComboBoxModel | 应用数据 |
| JProgressBar | BoundedRangeModel | GUI状态/应用数据 |
| JScrollBar | BoundedRangeModel | GUI状态/应用数据 |
| JSlider | BoundedRangeModel | GUI状态/应用数据 |
| JTabbedPane | SingleSelectionModel | GUI状态 |
| JList | ListModel | 应用数据 |
| JList | ListSelectionModel | GUI状态 |
| JTable | TableModel | 应用数据 |
| JTable | TableColumnModel | GUI状态 |
| JTree | TreeModel | 应用数据 |
| JTree | TreeSelectionModel | GUI状态 |
| JEditorPane | Document | 应用数据 |
| JTextPane | Document | 应用数据 |
| JTextArea | Document | 应用数据 |
| JTextField | Document | 应用数据 |
| JPasswordField | Document | 应用数据 |
Swing模型分类Swing提供的模型分为两大类:GUI状态模型和应用数据模型。GUI状态模型是描述GUI控件可视化状态的接口,如按钮是否按下,或列表中 那一项被选中。GUI状态模型通常仅在图形用户界面(GUI)环境中用到。通常来说 ,虽然编写使用GUI状态模型分离程序,尤其是当多个GUI控件共享状态,或当操 作一个控件自动更新另一个的值时比较有用,但GUI状态模型在Swing中并不是必 需的,完全可以通过组件顶层方法操作GUI控件的状态,而不必和模型直接交互 。应用数据模型是描述具有应用程序含义数据的接口,比如表格中的数据,或 列表显示的选项。这些数据模型为Swing提供了一个清晰分割应用程序界面和数 据逻辑的强大编程模式。对于以数据为核心的Swing组件,比如JTree和JTable, 强烈推荐使用数据模型进行交互。当然一些组件的模型根据应用场景的不同其分类介于GUI状态模型和应用数据 模型之间,比如JSlider和JProgressBar 的BoundedRangeModel。Swing的可分离模型接口并没有明确界定GUI状态模型和应用数据模型。这儿 所以做此说明,目的是让你更好的理解何时以及为何要需要使用分离的模型。