软件构建模式之MVC框架初窥(六)

2014-11-24 09:17:17 · 作者: · 浏览: 5
{
this.mf = mf;
model = mf.model;
//注册界面
model.registerObserver(mf.vp);
model.registerObserver(mf.rTextField);
model.registerObserver(mf.cTextField);
model.registerObserver(mf.sTextField);
model.registerObserver(mf.bTextField);
// model.registerObserver(mf.dTextField);
model.registerObserver(mf.slider);
mf.jButton1.addActionListener(this);
mf.slider.addChangeListener(this);
}
public void actionPerformed(ActionEvent actionEvent) {
if(actionEvent.getSource().equals(mf.jButton1)){
try{
double r = Double.parseDouble(mf.rTextField.getText());
if(r>=0.0&&r<=MAXRADII){
mf.slider.removeChangeListener(this);//去除监听,防止发生值更改事件导致反复操作
model.changeRadii(r);
mf.slider.addChangeListener(this);
}
else
showMessageDialog("请输入正确的半径0.0-"+MAXRADII+".0");
}catch(Exception err){
showMessageDialog("请输入正确的半径0.0-"+MAXRADII+".0");
}
}
}
public void stateChanged(ChangeEvent changeEvent) {
double r = (double)mf.slider.getValue();
model.changeRadii(r);
}
public void showMessageDialog(String str){
JOptionPane.showMessageDialog(mf,str,"消息",JOptionPane.INFORMATION_MESSAGE);
}
}
4.模型位于com.model下
[java]
/*
* CircleModel.java
*
* 圆的模型。
*/
package com.model;
import java.util.ArrayList;
import java.util.Iterator;
import com.util.ObserverInterface;
public class CircleModel {
private double radii = 10.0;//半径
private ArrayList observer = new ArrayList();//观察者列表
/** Creates a new instance of CircleModel */
public CircleModel() {
super();
}
public CircleModel(double radii){
setRadii(radii);
}
public double getRadii() {
return radii;
}
public void setRadii(double radii) {
this.radii = radii;
}
/**
* 计算周长
*/
public double computeGirth(){
return (radii*Math.PI*2.0);
}
/**
* 计算面积
*/
public double computeSuperficial(){
return (radii*radii*Math.PI);
}
public double computeBallSuperficial(){
return (radii*radii*4*Math.PI);
}
public double computeDiameter(){
return 2*radii;
}
/**
* 向模型中登记观察者
*/
public void registerObserver(ObserverInterface o){
observer.add(o);
}
public void removeObserver(ObserverInterface o){
observer.remove(o);
}
/**
* 当数据改变时,由控制器调用,通知各个观察者,改变视图
*/
public void changeRadii(double r){
setRadii(r);
dataUpdate();
}
private void dataUpdate() {
for(Iterator i = observer.iterator(); i.hasNext();){
ObserverInterface o = (ObserverInterface)(i.next());
o.dataUpdate(this);
}
}
}
5.最后一个接口工具包,位于com.util
[java]
/*
* ObserverInterface.java
*