Swing的MVC编程设计该怎么设计呢?
特别是View层是一个表格之类的,然后对表格数据进行操作。因为每一个Grid都是一个Text.很容易直接在View层进行操作。所以要做到MVC需要进行分离。
MVC结构如上图。可见我们要将Model层与View层分离。并且Controller层做两层的中间层。
Model层可以理解成是数据存放的地方。比如上面说到表格,那这里可能存放着一个数组。另外一些对表格有作用的属性。
View层则是Swing组件存在的地方,且只存在Swing组件。
Controller则是提供一些方法,被View层调用,对Model层进行修改。
程序设计如下:
Class View(){
}
Class Model(){
}
Class Controller(){
public Controller(View v, Model m){
}
}
上面结构看出来View并没有刻意调用Controller的地方。这里处理方法是用一个接口,存放View需要的调用的方法,让Controller实现。然后View使用这个接口来修改Model。
Interface ViewListener(){
void method1();
void method2();
}
Class View() extends JPanel{
ViewListener listener;
JButton button;
View(){
//init
button.addActionListener(e->{
listener.method1();
});
}
public void addListener(ViewListener vl){
listener=vl;
}
}
Class Model(){
}
Class Controller() implements ViewListener{
public Controller(View v, Model m){
v.addListener(this);
}
@Override
public void method1(){
//do something to Model.
}
@Override
public void method2(){
//do something to Model.
}
}
通过这样设计,只有View中会与Swing组件有关。
在组件的响应事件时要注意修改model中对应的数据。