最近尝试写一个记账的项目来巩固JAVASE的知识,顺便学习真正的项目该如何一点点构建,看了个类似的项目叫一本糊涂账,来自 http://how2j.cn/k/hutubill ,因为没有认真看过swing的知识,所以在用到ComboBox和Table的时候对于ComboBoxModel和TableModel这两个需要写的model有些疑惑。
因为是GUI,又有Model,我就很自觉的想:这个是不是就是天天说的MVC模式?于是google了一下,果然,SWING是MVC的方式写的。我目前的理解是,建一个JTable必须指定一个专门的TableModel来规定该Table的显示时的内部逻辑和规则,TableModel这个接口定义了:
public getColumnCount() //得到列数的规则
public Object getValueAt(int rowIndex, int columnIndex) //得到指定位置的值的规则
public int getRowCount()//得到行数的规则
这个规则是逻辑行为,而JTable创建出来之后,只能按照这个逻辑行为对user进行展示,按照这个发展,Swing的Controller应该是在和View糅合在一起了,毕竟用户跟UI交互的时候又想有业务,又想有界面显示,很难区分。只有把View中的UI和Listener绑定的过程,使得点击某个UI如提交表单时,可以调用相应的Listener这个环节属于Controller吧,我觉得Listener应该不属于Controller,因为Controller应该不涉及对Model具体的调整;UI自然也有View层,它根据Model把内容显示出来。Controller和View都是一些基于Model的方法,没有任何状态!
暂时是这样理解的…
找了很多帖子,明天早上上完课认真看一下,中午再更新。未完待续。
按照上述思路MVC层实现
https://blog.youkuaiyun.com/YoutellIdo/article/details/48145755
TestModel.java
package model;
public class TestModel {
private String message;
public String getMessage(){
return message;
}
public void setMessage(String message){
this.message=message;
}
}
TestView.java
package view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JPanel