Java:MVC设计模式

MVC设计模式

MVC的概念

请添加图片描述
View做的事情是当被通知数据被修改了,就从Model获得数据把整个窗口重新画一遍
Model做的事情是当数据修改了,Model会通知View数据被修改了,并提供给View数据
Control会检测用户是否修改了数据,如在表格中输入了数据,如果数据被修改了,则调用Model提供的接口来修改Model中的数据
在上面的设计模式种很重要的一点是View和Control是没有关系的,用户在界面上的操作不直接修改界面上的数据,而是要经过Model,由它来调用View重绘窗口,使数据显示在窗口中。
这样做的好处是每一个模块都很单纯,特别是View不用考虑如何重绘改变的数据,View会把所有数据都拿过来重绘一遍。

MVC实例

下面是一个课程表的代码:
KCB.java

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class KCB {

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		JTable table = new JTable(new KCBdata());
		JScrollPane pane = new JScrollPane(table);
		frame.add(pane);
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);

	}

}

KCBdata.java


import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

public class KCBdata implements TableModel {
	private String[] title= {
			"周一", "周二", "周三", "周四", "周五", "周六", "周日"
	};
	
	private String[][] data = new String[8][7];
	
	public KCBdata() {
		for(int i=0; i<data.length; i++) {
			for(int j=0; j<data[i].length; j++) {
				data[i][j] = "";
			}
		}
	}
	@Override
	public int getRowCount() {
		return 8;
	}

	@Override
	public int getColumnCount() {
		return 7;
	}

	@Override
	public String getColumnName(int columnIndex) {
		return title[columnIndex];
	}
 
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		return String.class;	//String.class会返回java.lang.String
		//每一个.class文件被jvm加载后,会在jvm中创建一个类型为Class类型的对象来表示这份字节码,你可以
		//通过类名.  class获取这个Class类型的对象,例如String.class,也可以通过类对象.getClass()方法		
		//来获取,例如obj.getClass()
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return true;
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		return data[rowIndex][columnIndex];
	}

	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		data[rowIndex][columnIndex] = (String)aValue;
	}

	@Override
	public void addTableModelListener(TableModelListener l) {
		// TODO 自动生成的方法存根

	}

	@Override
	public void removeTableModelListener(TableModelListener l) {
		// TODO 自动生成的方法存根

	}

}

在这个实例中KCB.java(JTable)合并成为了View和Control的角色,KCBdata.java(TableModel)则是Model。

这是常见的一种做法,因为得到用户的输入(控制)本来就是在图形界面实现的,所以在图形界面表达界面的类中,它做了表现,同时也是它得到了用户的输入,又由它来控制Model,这和MVC并不矛盾,只是把View和Control结合起来了。

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值