Java里的mvc设计模式

mvc设计模式:数据、表现和控制三者分离,各负其责。

M:Model(模型)           V:View(表现)         C:Control(控制)

控制:通过模型提供的接口从用户得到输入(用鼠标、键盘在这个表格里进行的动作),根据输入调整数据(模型)

模型:保存和维护数据,提供接口让外部修改数据,通知表现需要刷新。

表现:当被通知数据修改后,从模型获得数据,根据数据重画出表现(刷新)。

控制和表现是没有关系的,控制不直接和表现打交道,即用户在界面上做的操作,不直接去修改界面上的显示。而是用户的输入去调整内部的数据,内部的数据去触发表现,即表现把所有数据拿过去重画一遍。

这样做的好处是每一个部分都很单纯,尤其是View。

示例(一个课程表,可以添加、删除课程)如下:

JTable:表现+控制         这是mvc的常用做法

package kechengbiao;

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

public class Kechengbiao {
	public static void main(String [] args) {
		//frame是个容器
		JFrame frame = new JFrame();
		
        //JTable可以以表格的形式显示和编辑数据。JTable这个类是表达你所看见的东西(表现),而不是整个表格,它不管数据,数据在JTableModel里。
		//JTable的对象在构造时,给了它一个TableModel的对象,TableModel是个接口,这个接口是和JTable一起来的,因此JTable知道TableModel长什么样。
		
		
		
        //我实现了一个TableModel的类的对象给JTable。在那个TableModel里,必须去Override它所要求的那么多的函数,这些函数是在JTable被显示的过程当中会被逐一调用的。
		//调用过程就会回过来调我写的函数。   
        //所以我的数据是由我写的TableModel来维护,而JTable只管表现,不管数据。

		JTable table =  new JTable(new KCBData());
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭机制,即点红叉叉可以关闭窗口
		//table本身没有实现滚卷,就没有办法做所有内容的呈现,它只能呈现一部分内容
		//把table放进panel,实现滚卷
		JScrollPane panel = new JScrollPane(table);
		frame.add(panel);
		frame.setSize(400,400);
//		frame.pack();//把自己的大小计算一下
		frame.setVisible(true);
	}
}
package kechengbiao;

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() {
		// TODO Auto-generated method stub
		return 8;
	}

	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return 7;
	}
	
	//得到列名
	@Override
	public String getColumnName(int arg0) {
		// TODO Auto-generated method stub
		//title是前面写好的放着周一周二周三...的数组
		return title[arg0];
	}

	@Override
	public Class<?> getColumnClass(int columnIndex) {
		// TODO Auto-generated method stub
		return String.class;
	}

	//每个格子可以被编辑
	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		return true;
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		return data[rowIndex][columnIndex];
	}

	//arg0是对象
	@Override
	public void setValueAt(Object arg0, int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		data[rowIndex][columnIndex]=(String)arg0;
	}

	@Override
	public void addTableModelListener(TableModelListener l) {
		// TODO Auto-generated method stub

	}

	@Override
	public void removeTableModelListener(TableModelListener l) {
		// TODO Auto-generated method stub

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值