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 getColumnClass(int columnIndex) {// TODO Auto-generated method stubreturn String.class;}//每个格子可以被编辑@Overridepublic boolean isCellEditable(int rowIndex, int columnIndex) {// TODO Auto-generated method stubreturn true;}@Overridepublic Object getValueAt(int rowIndex, int columnIndex) {// TODO Auto-generated method stubreturn data[rowIndex][columnIndex];}//arg0是对象@Overridepublic void setValueAt(Object arg0, int rowIndex, int columnIndex) {// TODO Auto-generated method stubdata[rowIndex][columnIndex]=(String)arg0;}@Overridepublic void addTableModelListener(TableModelListener l) {// TODO Auto-generated method stub}@Overridepublic void removeTableModelListener(TableModelListener l) {// TODO Auto-generated method stub}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
