软件构建模式之MVC框架初窥(五)
}
}
[java]
/*
* ViewPanel.java
*/
package com.view;
import com.model.CircleModel;
import com.util.ObserverInterface;
import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;
/**
*
*/
public class ViewPanel extends JPanel implements ObserverInterface{
private CircleModel model;
/** Creates a new instance of ViewPanel */
public ViewPanel() {
}
public ViewPanel(CircleModel model){
this.setModel(model);
vpInit();
}
private void vpInit(){
// this.setBackground(Color.GRAY);
this.setBorder(new TitledBorder(BorderFactory.createLineBorder(Color.blue,1),"视图区"));
}
public void paintComponent(Graphics g){
super.paintComponent(g);
if(getModel()==null)
return;
double r = getModel().getRadii();
int w = this.getWidth();
int h = this.getHeight();
int x = (int)Math.round(r);
// g.setColor(Color.BLUE);
// g.fillOval(w/2-x,h/2-x,x+x,x+x);
g.drawOval(w/2-x,h/2-x,x+x,x+x);
}
public void dataUpdate(CircleModel cm) {
this.setModel(getModel());
repaint();
}
public CircleModel getModel() {
return model;
}
public void setModel(CircleModel model) {
this.model = model;
}
}
[java]
//待添加的直径一栏
/*
* TextField.java
*/
package com.view;
import com.util.ObserverInterface;
import java.text.DecimalFormat;
import javax.swing.JTextField;
import com.model.CircleModel;
/**
*
*/
public class DTextField extends JTextField implements ObserverInterface{
private CircleModel model;
private DecimalFormat df = new DecimalFormat("#####0.00");
public DTextField() {
}
public DTextField(CircleModel model){
super(10);
this.model = model;
this.update();
}
public void dataUpdate(CircleModel cm) {
this.setModel(getModel());
update();
}
private void update(){
this.setText(df.format(model.computeDiameter()));
}
public CircleModel getModel() {
return model;
}
public void setModel(CircleModel model) {
this.model = model;
}
}
3.控制器位于包com.controller下
[java]
/*
* Controller.java
*/
package com.controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.JOptionPane;
import java.text.DecimalFormat;
import com.MainFrame;
import com.view.ViewPanel;
import com.model.CircleModel;
/**
*
*/
public class Controller implements ActionListener,ChangeListener{
public static final int MAXRADII = 500;
private MainFrame mf;
private CircleModel model;
/** Creates a new instance of Controller */
public Controller() {
}
public Controller(MainFrame mf)