构建应用程序应该
以数据为中心,而不是以用户界面为中心,这是一个良好的编程习惯。为支持这种编程范式,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状态模型和应用数据模型。这儿所以做此说明,目的是让你更好的理解何时以及为何要需要使用分离的模型。
共享模型定义
值得注意的是,上文中表格中,许多组件的数据抽象相似,只需一个接口而不用过分泛化时,组件可以共享同一模型定义。共享模型定义允许在不同组件之间自动连
接。比如,JSlider和JScrollBar都使用BoundedRangeModel接口,因此可以在一个JScrollBar和一个
JSlider之间共享同一个BoundedRangeModel实例,这样它们之间的状态就总是同步的。
分离模型编程接口
使用模型的Swing组件必须提供访问修改模型的set/get方法,即模型必须是该组件的限定性属性。比如,JSlider使用BoundedRangeModel接口作为它的模型定义,因此它必须提供下面方法:
public BoundedRangeModel getModel()
publicvoidsetModel(BoundedRangeModelmodel)
所有Swing组件有一个共同点:如果你不设置它的模型,组件会在内部创建/安装一个缺省模型。这些缺省模型类的命名习惯是在接口名称之前加上“Default”,比如JSlider的构造函数中初始化一个DefaultBoundedModel对象。
public JSlider(int orientation, int min, int max, intvalue){
checkOrientation(orientation);
this.orientation = orientation;
this.model = newDefaultBoundedRangeModel(value, 0, min, max);
this.model.addChangeListener(changeListener);
updateUI();
}
如果程序接着调用setModel(),缺省的模型就被替换了,比如下面例子:
JSlider slider = new JSlider();
BoundedRangeModel myModel = new DefaultBoundedRangeModel() {
public void setValue(int n){
System.out.println("SetValue: "+ n);
super.setValue(n);
}
});
slider.setModel(myModel);
对于更复杂的模型(如JTable和JList),Swing还提供一个抽象模型实现,让开发者不需要从头开始创建自己的模型。
如JList的模型接口是ListModel,Swing同时提供了DefaultListModel和AbstractListModel两个类来协助开发者创建自定义的列表模型。
模型改变通知
当数据或者发生变动时,模型必须通知所有相关方(比如视图)。Swing模型使用前面文章所讲述的事件模型来实现这种触发。Swing中有两种方法发送这种通知:
发送轻量级通知,表明状态已经改变,需要Listener通过查询模型,发现什么改变了并做出响应。此方法的优点是单独事件实例能用作该模型的所有通知,同时对于需要频繁通知的事件非常有用(比如JScrollBar被拖动时)。
发送状态化通知,详细描述模型如何改变。这种方法需要为每个通知创建一个新的事件实例。当通知通过查询模型不能有效地给Listener提供足够的信息时,此方法非常有用。比如当JTable的一列表格数据发生改变时。
分享到:
相关推荐
Swing框架是Java GUI开发中的一个重要部分,它是建立在AWT(Abstract Window Toolkit)之上,提供了更丰富的组件和更现代的用户界面。Swing使用Java2D API来绘制组件,确保了平台独立性,使得在不同操作系统上都能...
Swing组件基于MVC(Model-View-Controller)设计模式,允许开发者分离数据模型、视图显示和用户交互逻辑。例如,JTable组件的模型可以独立于其显示和用户交互进行管理。 2. **容器与布局管理器**: 容器(如...
Java Swing的MVC(Model-View-Controller)模式是一种用于构建用户界面的软件设计模式,尤其在GUI(图形用户界面)开发中广泛应用。MVC模式将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器...
【标题】"仿淘宝 无报错java swing ssh 框架源代码" 提供的是一款基于Java Swing和SSH框架开发的电子商务系统源码,该系统旨在模仿淘宝网的功能和界面,为学习和实践Java后端开发的用户提供了一个实际的项目案例。...
在Java Swing中实现MVC设计模式的知识点涉及软件设计原则、编程范式以及Swing框架的具体应用。MVC(Model-View-Controller)设计模式是一种将数据表示和数据处理分离的架构,目的是让开发者能够独立开发和维护数据...
- **Swing概述**:Swing是Java中用于构建GUI应用程序的一个轻量级组件库,它是建立在AWT基础之上的一个高级框架。Swing组件不仅提供了更丰富的功能,而且在不同操作系统上具有一致的表现形式,这主要得益于Swing采用...
这是一个基于Java Swing框架开发的简易商城系统项目,旨在帮助初学者理解如何将数据库技术与图形用户界面(GUI)相结合,创建一个实际的应用程序。在这个项目中,MySQL被用作后台数据库,Eclipse作为开发环境,Java ...
Swing MVC(Model-View-Controller)是一种设计模式,它被广泛应用于图形用户界面(GUI)开发,包括Java Swing框架。在Swing中,MVC模式帮助开发者将应用程序的逻辑分解为三个相互独立的部分,从而提高代码的可读性...
【标题】"基于Spring,MyBatis的JavaSwing记账小程序"是一个综合性的Java应用程序,它结合了三个核心的技术栈:Spring框架、MyBatis持久层框架以及Java Swing GUI库,用于创建一个用户友好的桌面记账工具。...
其中,Model-View-Controller(MVC)架构模式是一种非常流行的架构模式,尤其适用于用户界面较多的应用程序。本文将详细介绍如何在Java Swing应用中实现MVC架构。 #### 二、MVC架构概述 MVC架构模式的核心在于将...
### Swing初学者入门教程知识点详解 #### 一、UI(用户界面)的深入理解 ...通过以上知识点的详细介绍,希望能够帮助初学者更好地理解和掌握Swing框架,为进一步学习和开发Java桌面应用程序奠定坚实的基础。
2. **MVC模式**:Model-View-Controller模式是一种软件设计模式,用于分离业务逻辑、数据模型和用户界面。在Swing应用中,模型通常处理数据的读取和写入,视图负责显示数据,而控制器接收用户输入并调用模型和视图...
使用java swing,socket,多线程实现。 1) 客户端用来接收和展示数据,服务器实现与底层数据的交互。 2) 实现服务器端与客户端的分离,如果要操作数据库,可以在服务器端改代码调用Model。 3) 实现用户上线/下线...
4. **Jgoodies Bindings**:这是一个强大的数据绑定框架,它简化了模型和视图之间的数据同步,使得开发者可以更容易地实现MVVM(Model-View-ViewModel)或MVC(Model-View-Controller)设计模式。 描述中提到的...
Swing组件遵循MVC模式,每个组件都有一个模型(Model)来存储数据,一个视图(View)来展示数据,以及一个控制器(Controller)来处理用户交互。这种设计使得代码结构清晰,易于维护和扩展。 8. **组件扩展与...
JavaSwing+MyBatis简单学生管理系统是一款基于Java桌面应用技术与持久层框架MyBatis构建的信息管理软件。这个系统的主要目标是实现对学生信息的有效存储、检索和管理,适用于教育机构或个人学习使用。开发环境为Java...
在Swing框架中,可以通过JFrame、JPanel、JButton、JLabel等组件构建用户界面。在这个项目中,视图可能会包含窗口、菜单、按钮等元素,用于显示操作系统的关键信息和提供用户交互界面。 3. **控制器(Controller)*...
Swing 是 Java 用于构建图形用户界面(GUI)的一个库,它是 Java Foundation Classes (JFC) 的一部分。这个入门资料整理文档旨在引导初学者逐步掌握 Swing 的基础知识,并通过实际操作来构建一个简单的航班预订系统...
此外,`JLabel`还支持文本与图标的同时显示,以及文本的对齐方式调整,使其成为Swing应用程序中不可或缺的组件之一。 #### 结论 Swing作为一个成熟的GUI工具包,为Java开发者提供了构建高质量桌面应用程序所需的...