`

Swing框架之Model之一

阅读更多

Swing框架之Model之一

     构建应用程序应该 以数据为中心,而不是以用户界面为中心,这是一个良好的编程习惯。为支持这种编程范式,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实例,这样它们之间的状态就总是同步的。

http://static4.photo.sina.com.cn/orignal/4b6047bce026f4d111d73

分离模型编程接口

       使用模型的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框架详细讲解

    Swing框架是Java GUI开发中的一个重要部分,它是建立在AWT(Abstract Window Toolkit)之上,提供了更丰富的组件和更现代的用户界面。Swing使用Java2D API来绘制组件,确保了平台独立性,使得在不同操作系统上都能...

    swing 应用框架 1.3 英文版 API

    Swing组件基于MVC(Model-View-Controller)设计模式,允许开发者分离数据模型、视图显示和用户交互逻辑。例如,JTable组件的模型可以独立于其显示和用户交互进行管理。 2. **容器与布局管理器**: 容器(如...

    java swing的mvc模式的简单框架

    Java Swing的MVC(Model-View-Controller)模式是一种用于构建用户界面的软件设计模式,尤其在GUI(图形用户界面)开发中广泛应用。MVC模式将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器...

    仿淘宝 无报错java swing ssh 框架源代码

    【标题】"仿淘宝 无报错java swing ssh 框架源代码" 提供的是一款基于Java Swing和SSH框架开发的电子商务系统源码,该系统旨在模仿淘宝网的功能和界面,为学习和实践Java后端开发的用户提供了一个实际的项目案例。...

    在Java Swing中实现MVC设计模式(英文)

    在Java Swing中实现MVC设计模式的知识点涉及软件设计原则、编程范式以及Swing框架的具体应用。MVC(Model-View-Controller)设计模式是一种将数据表示和数据处理分离的架构,目的是让开发者能够独立开发和维护数据...

    swing教程之经典

    - **Swing概述**:Swing是Java中用于构建GUI应用程序的一个轻量级组件库,它是建立在AWT基础之上的一个高级框架。Swing组件不仅提供了更丰富的功能,而且在不同操作系统上具有一致的表现形式,这主要得益于Swing采用...

    简易商城系统,MySQL+eclipse (运用Java swing框架)

    这是一个基于Java Swing框架开发的简易商城系统项目,旨在帮助初学者理解如何将数据库技术与图形用户界面(GUI)相结合,创建一个实际的应用程序。在这个项目中,MySQL被用作后台数据库,Eclipse作为开发环境,Java ...

    Swing MVC 代码示例

    Swing MVC(Model-View-Controller)是一种设计模式,它被广泛应用于图形用户界面(GUI)开发,包括Java Swing框架。在Swing中,MVC模式帮助开发者将应用程序的逻辑分解为三个相互独立的部分,从而提高代码的可读性...

    基于spring,mybatis的JavaSwing记账小程序

    【标题】"基于Spring,MyBatis的JavaSwing记账小程序"是一个综合性的Java应用程序,它结合了三个核心的技术栈:Spring框架、MyBatis持久层框架以及Java Swing GUI库,用于创建一个用户友好的桌面记账工具。...

    Java-Swing-MVC使用

    其中,Model-View-Controller(MVC)架构模式是一种非常流行的架构模式,尤其适用于用户界面较多的应用程序。本文将详细介绍如何在Java Swing应用中实现MVC架构。 #### 二、MVC架构概述 MVC架构模式的核心在于将...

    swing初学者入门教程

    ### Swing初学者入门教程知识点详解 #### 一、UI(用户界面)的深入理解 ...通过以上知识点的详细介绍,希望能够帮助初学者更好地理解和掌握Swing框架,为进一步学习和开发Java桌面应用程序奠定坚实的基础。

    swing宠物管理系统(有文档).rar

    2. **MVC模式**:Model-View-Controller模式是一种软件设计模式,用于分离业务逻辑、数据模型和用户界面。在Swing应用中,模型通常处理数据的读取和写入,视图负责显示数据,而控制器接收用户输入并调用模型和视图...

    java swing实现群聊功能

    使用java swing,socket,多线程实现。 1) 客户端用来接收和展示数据,服务器实现与底层数据的交互。 2) 实现服务器端与客户端的分离,如果要操作数据库,可以在服务器端改代码调用Model。 3) 实现用户上线/下线...

    一个神奇的swing软件Jgoodies

    4. **Jgoodies Bindings**:这是一个强大的数据绑定框架,它简化了模型和视图之间的数据同步,使得开发者可以更容易地实现MVVM(Model-View-ViewModel)或MVC(Model-View-Controller)设计模式。 描述中提到的...

    java swing基础教程

    Swing组件遵循MVC模式,每个组件都有一个模型(Model)来存储数据,一个视图(View)来展示数据,以及一个控制器(Controller)来处理用户交互。这种设计使得代码结构清晰,易于维护和扩展。 8. **组件扩展与...

    javaSwing+mybatis 简单的学生管理系统

    JavaSwing+MyBatis简单学生管理系统是一款基于Java桌面应用技术与持久层框架MyBatis构建的信息管理软件。这个系统的主要目标是实现对学生信息的有效存储、检索和管理,适用于教育机构或个人学习使用。开发环境为Java...

    Java操作系统管理软件(Swing)

    在Swing框架中,可以通过JFrame、JPanel、JButton、JLabel等组件构建用户界面。在这个项目中,视图可能会包含窗口、菜单、按钮等元素,用于显示操作系统的关键信息和提供用户交互界面。 3. **控制器(Controller)*...

    Swing 入门资料整理文档

    Swing 是 Java 用于构建图形用户界面(GUI)的一个库,它是 Java Foundation Classes (JFC) 的一部分。这个入门资料整理文档旨在引导初学者逐步掌握 Swing 的基础知识,并通过实际操作来构建一个简单的航班预订系统...

    swing入门教程

    此外,`JLabel`还支持文本与图标的同时显示,以及文本的对齐方式调整,使其成为Swing应用程序中不可或缺的组件之一。 #### 结论 Swing作为一个成熟的GUI工具包,为Java开发者提供了构建高质量桌面应用程序所需的...

Global site tag (gtag.js) - Google Analytics