view接口,供所有view 实现
java 代码
- public interface View {
- public void refreshContactView(String firstName, String lastName);
- }
model java 代码
- import java.util.ArrayList;
- import java.util.Iterator;
-
- public class TextModel {
- private String firstName;
- private String lastName;
-
- private ArrayList contactViews = new ArrayList();
-
- public TextModel(){
- this(null);
- }
- public TextModel(View view){
- firstName = "";
- lastName = "";
-
- if (view != null){
- contactViews.add(view);
- }
- }
- public void addContactView(View view){
- if (!contactViews.contains(view)){
- contactViews.add(view);
- }
- }
-
- public void removeContactView(View view){
- contactViews.remove(view);
- }
-
- public void updateModel(String newFirstName, String newLastName){
-
- if (!isEmptyString(newFirstName)){
- setFirstName(newFirstName);
- }
- if (!isEmptyString(newLastName)){
- setLastName(newLastName);
- }
-
- updateView();
- }
- private void updateView(){
- Iterator notifyViews = contactViews.iterator();
- while (notifyViews.hasNext()){
- ((View)notifyViews.next()).refreshContactView(firstName, lastName);
- }
- }
-
- public String getFirstName(){ return firstName; }
- public String getLastName(){ return lastName; }
-
-
- public void setFirstName(String newFirstName){ firstName = newFirstName; }
- public void setLastName(String newLastName){ lastName = newLastName; }
-
- private boolean isEmptyString(String input){
- return ((input == null) || input.equals(""));
- }
- }
用来修改的视图 构造里传入model ,同时启动控制器类
java 代码
- public class EditView extends JPanel implements View{
-
- private static final String UPDATE_BUTTON = "Update";
-
- private static final String EXIT_BUTTON = "Exit";
-
- private static final String CONTACT_FIRST_NAME = "First Name ";
-
- private static final String CONTACT_LAST_NAME = "Last Name ";
-
- private static final int FNAME_COL_WIDTH = 25;
-
- private static final int LNAME_COL_WIDTH = 40;
-
- private EditController controller;
-
- private JLabel firstNameLabel, lastNameLabel;
-
- private JTextField firstName, lastName;
-
- private JButton update, exit;
-
- public EditView(TextModel model) {
-
- controller = new EditController(model,this);
- createGui();
- }
-
- public void createGui() {
- update = new JButton(UPDATE_BUTTON);
- exit = new JButton(EXIT_BUTTON);
-
- firstNameLabel = new JLabel(CONTACT_FIRST_NAME);
- lastNameLabel = new JLabel(CONTACT_LAST_NAME);
-
- firstName = new JTextField(FNAME_COL_WIDTH);
- lastName = new JTextField(LNAME_COL_WIDTH);
-
- JPanel editPanel = new JPanel();
- editPanel.setLayout(new BoxLayout(editPanel, BoxLayout.X_AXIS));
-
- JPanel labelPanel = new JPanel();
- labelPanel.setLayout(new GridLayout(0, 1));
-
- labelPanel.add(firstNameLabel);
- labelPanel.add(lastNameLabel);
-
- editPanel.add(labelPanel);
-
- JPanel fieldPanel = new JPanel();
- fieldPanel.setLayout(new GridLayout(0, 1));
-
- fieldPanel.add(firstName);
- fieldPanel.add(lastName);
-
- editPanel.add(fieldPanel);
-
- JPanel controlPanel = new JPanel();
- controlPanel.add(update);
- controlPanel.add(exit);
- update.addActionListener(controller);
- exit.addActionListener(new Handler());
-
- setLayout(new BorderLayout());
- add(editPanel, BorderLayout.CENTER);
- add(controlPanel, BorderLayout.SOUTH);
- }
-
- public Object getUpdateRef() {
- return update;
- }
-
- public String getFirstName() {
- return firstName.getText();
- }
-
- public String getLastName() {
- return lastName.getText();
- }
-
- public void refreshContactView(String newFirstName, String newLastName) {
-
- firstName.setText(newFirstName);
- lastName.setText(newLastName);
-
- }
-
- private class Handler implements ActionListener {
- public void actionPerformed(ActionEvent event) {
- System.exit(0);
- }
- }
-
- }
控制类,把model类和View类注册进来,通过这个类去改变model,model改变时
* 调用自身的update方法,更新view
java 代码
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
-
- public class EditController implements ActionListener {
- private TextModel model;
- private EditView view;
-
- public EditController(TextModel model2, EditView view2) {
-
- view = view2;
- model = model2;
- }
-
- public void actionPerformed(ActionEvent evt){
- Object source = evt.getSource();
- if (source == view.getUpdateRef()){
- updateModel();
- }
- }
- private void updateModel(){
- String firstName = null;
- String lastName = null;
- if (view.getFirstName()!=null){
- firstName = view.getFirstName();
- }
- if (view.getLastName()!=null){
- lastName = view.getLastName();
- }
- model.updateModel( firstName, lastName);
- }
- }
用来显示model数据视图
java 代码
- import java.awt.BorderLayout;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
-
- class DisplayView extends JPanel implements View {
- private JTextArea display;
-
- public DisplayView() {
- createGui();
- }
-
- public void createGui() {
- setLayout(new BorderLayout());
- display = new JTextArea(10, 40);
- display.setEditable(false);
- JScrollPane scrollDisplay = new JScrollPane(display);
- this.add(scrollDisplay, BorderLayout.CENTER);
- }
-
- public void refreshContactView(String newFirstName, String newLastName) {
- display.setText("UPDATED CONTACT:\nNEW VALUES:\n" + "\tName: "
- + newFirstName + " " + newLastName + "\n");
- }
-
- }
整个mvc用到model controller view 都是联系起来的
* model-->view
* view--->model
* controller把它们联系起来
java 代码
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import java.io.Serializable;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
-
- public class RunMVCPattern {
-
- public static void main(String [] arguments){
-
- TextModel model = new TextModel();
-
- EditView editorView = new EditView(model);
- model.addContactView(editorView);
- createGui(editorView, "Contact Edit Window");
-
- System.out.println("Creating DisplayView");
- DisplayView displayView = new DisplayView();
- model.addContactView(displayView);
- createGui(displayView, " Display Window");
- }
-
- private static void createGui(JPanel contents, String title){
- JFrame applicationFrame = new JFrame(title);
- applicationFrame.getContentPane().add(contents);
- applicationFrame.pack();
- applicationFrame.setVisible(true);
- }
- }
分享到:
相关推荐
在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...
本实验旨在通过这两种模式来实现对数据库的高效访问,并利用Servlet技术构建一个完整的Web应用。 首先,DAO模式是一种用于分离业务逻辑层与数据访问层的模式。在该模式中,DAO类作为数据存取的接口,负责处理与...
* 高度灵活性:MVC 模式可以轻松地更换 View 或 Model,实现不同的显示方式和数据存储方式。 * 易于开发和维护:MVC 模式将应用程序分离成三个部分,每个部分都可以独立开发和维护,从而提高了开发效率和维护效率。 ...
- **Java开发WebApplication**:使用如Spring MVC、Struts等框架实现MVC模式,处理Web请求和响应。 - **.NET开发WebApplication**:通过ASP.NET MVC框架,构建动态和响应式的Web应用。 - **PHP开发WebApplication**...
【标题】"jsp实验-用java实现MVC模式的管理系统"揭示了本次实验的核心内容,即使用Java语言和JSP技术构建一个基于MVC(Model-View-Controller)设计模式的管理信息系统。这个系统旨在帮助初学者理解并实践MVC模式在...
在Java实现中,有静态代理和动态代理两种方式。静态代理是由开发者显式创建代理类,而动态代理则利用Java的动态代理API在运行时动态生成代理类。 工厂模式是一种创建型设计模式,它提供了一种创建对象的统一接口,...
总的来说,Java两层MVC模式是一种简洁而实用的架构选择,尤其适用于对复杂性要求不高的项目。然而,为了保证代码的可读性、可维护性和可扩展性,开发者在实际应用中应考虑适当的模块化和设计原则,以确保代码质量。
为了克服模式1的局限性,模式2采用了基于MVC的设计模式,通过不同的组件分别实现应用逻辑、数据处理和显示逻辑。在这种模式下,Model通常由JavaBean对象组成,用于封装商业规则和存储数据。View则使用JSP页面来显示...
- Model1和Model2是JSP中两种不同的MVC实现方式。Model1将业务逻辑和表现层混合在一起,而Model2(也就是MVC模式的典型实现)强调了组件间的分离。 - Spring MVC是一个流行的Java框架,它简化了在JSP中实现MVC模式...
**MVC模式**,全称为Model-View-Controller(模型-视图-控制器),是一种广泛应用于软件开发,尤其是Web应用开发的设计模式。该模式的主要目的是将业务逻辑、数据处理和用户界面进行分离,使得各部分可以独立开发和...
【标题】"简单的登录MVC模式"涉及到的是Web开发中的一种常见设计模式——Model-View-Controller(模型-...同时,通过查看源代码,还可以学习到具体的编程语言(如PHP、Java、ASP.NET等)在实现MVC模式时的语法和技巧。
**MVC设计模式详解** ...在本例子中,通过实现一个简单的球体计算应用,我们可以深入理解MVC模式的各个组成部分以及它们之间的协作方式。通过扩展MVC模式,我们可以构建出更复杂且灵活的应用系统。
MVC 模式是一种软件架构模式,它将应用程序分为三个主要部分:Model、View 和 Control。这种模式的主要目的是将业务逻辑层、表示层和应用逻辑层分离,以提高代码的可维护性和重用性。 在这个实例中,我们将使用 MVC...
在软件开发领域,MVC(Model-View-Controller)和MVP(Model-View-Presenter)是两种常见的设计模式,用于构建用户界面。这两种模式都致力于分离关注点,提高代码的可测试性和可维护性。这里我们将深入探讨这两种...
压缩包中的"SampleCode"可能包含了实现MVC模式的示例代码。通常,这些代码会包含以下部分: 1. **Model类**:如`UserModel.java`,可能包含用户数据的属性和方法,用于数据的获取和处理。 2. **Controller类**:如`...
本文将深入探讨两种常见的设计模式——MVC(Model-View-Controller)和MVP(Model-View-Presenter),并结合实际的TestMVP项目,解析它们在实际开发中的运用。 首先,我们来了解一下MVC模式。MVC是一种软件设计模式...
在Java Web开发中,MVC(Model-View-Controller)三层架构和DAO(Data Access Object)工厂模式是两种常见的设计模式,它们对于构建高效、可维护的系统至关重要。本项目结合这两种模式,旨在提高代码组织的清晰度和...
SQLite3则是一个轻量级的嵌入式数据库,而MVC和单例模式是软件设计中的两种重要概念。 首先,让我们理解MVC设计模式。MVC将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型...
在给定的文件中,我们看到了如何在MVC模式中处理图像数据的具体实现。 ### 一、`ImageResult`类的实现 `ImageResult`是MVC框架中用于返回图像数据的一种自定义结果类型。在上述代码片段中,`ImageResult`继承自`...