构建应用程序应该以数据为中心,而不是以用户界面为中心,这是一个良好 的编程习惯。为支持这种编程范式,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状态模型和应用数据模型。这儿 所以做此说明,目的是让你更好的理解何时以及为何要需要使用分离的模型。
时间: 2024-08-19 22:28:43