import javax.swing.*;
import java.awt.event.*;
/**
* <p>Title: SphereWindow</p>
* <p>Description: The Controller part of the model-view paradigm</p>
* <p>Copyright: Copyright (c) 2005</p>
* @author Smart Lee
* @version 1.1
*/
public class SphereWindow extends SphereFrame implements
ActionListener, MouseListener, MouseMotionListener{
// 创建视图一
TextView tView = new TextView();
// 创建视图二
GraphicsView gView = new GraphicsView();
// 创建模型
Sphere model = new Sphere();
//Construct the application
public SphereWindow() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Main method
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
new SphereWindow();
}
private void jbInit() throws Exception {
// 添加视图
contentPane.add(tView);
contentPane.add(gView);
this.setVisible(true);
// 建立模型与视图一的关联
model.addObserver(tView);
tView.update(model, null);
// 建立模型与视图二的关联
model.addObserver(gView);
gView.update(model, null);
// 为视图一各控件添加事件监听器
tView.radiusTextField.addActionListener(this);
tView.volumeTextField.addActionListener(this);
tView.surfAreaTextField.addActionListener(this);
// 为视图二添加鼠标事件
gView.addMouseListener(this);
gView.addMouseMotionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == tView.radiusTextField) {
JTextField jtf = (JTextField)e.getSource();
// 捕获异常字符
try {
double radius = Double.parseDouble(jtf.getText());
// 更改模型数据
model.setRadius(radius);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,"illegal character!");
}
// 调用视图二的绘图方法以更新视图
gView.repaint();
}
if (e.getSource() == tView.volumeTextField) {
JTextField jtf = tView.volumeTextField;
try {
double volume = Double.parseDouble(jtf.getText());
model.setVolume(volume);
} catch(Exception ex) {
JOptionPane.showMessageDialog(null,"illegal character!");
}
gView.repaint();
}
if (e.getSource() == tView.surfAreaTextField) {
JTextField jtf = (JTextField)e.getSource();
try {
double surfArea = Double.parseDouble(jtf.getText());
model.setSuArea(surfArea);
} catch(Exception ex) {
JOptionPane.showMessageDialog(null,"illegal character!");
}
gView.repaint();
}
}
public void mousePressed(MouseEvent e) {
int X = gView.getWidth() / 2;
int Y = gView.getHeight() / 2;
gView.bShowDim = true; // 控制是否显示点坐标
gView.x = e.getX();
gView.y = e.getY();
// 圆心坐标(X, Y)
gView.radius = pointDistance(gView.x, gView.y, X, Y);
// 更改数据模型
model.setRadius(gView.radius);
gView.repaint();
}
public void mouseReleased(MouseEvent e) {
// 鼠标离开时不再显示点坐标
gView.bShowDim = false;
gView.repaint();
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
int X = gView.getWidth() / 2;
int Y = gView.getHeight() / 2;
gView.bShowDim = true;
gView.x = e.getX();
gView.y = e.getY();
gView.radius = pointDistance(gView.x, gView.y, X, Y);
model.setRadius(gView.radius);
gView.repaint();
}
/**
* 求两点距离
* @param x1 double 点1的横坐标
* @param y1 double 点1的纵坐标
* @param x2 double 点2的横坐标
* @param y2 double 点2的纵坐标
* @return double
*/
protected double pointDistance(double x1, double y1, double x2, double y2) {
return Math.pow(((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)), 1/2.0);
}
}
mvc.rar_mvc_mvc模式
版权申诉
130 浏览量
2022-09-24
13:08:52
上传
评论
收藏 5KB RAR 举报
我虽横行却不霸道
- 粉丝: 73
- 资源: 1万+
最新资源
- C库函数参考手册.rar,是chm文件,查询非常方便,带用例,非常详解
- C库函数参考手册.rar,是chm文件,查询非常方便,带用例,非常详解
- 17个STM32F030C8T6例程
- 0.0.0 VScode插件platformIO开发环境的安装[esp32、8266]_̌萌新历险记的博客-CSDN博客.mhtml
- 基于matlab故障级联预测和分析的影响模型的源代码.rar
- 基于matlab实现的Frank-Wolfe算法,交通网络流中交通分配能用上.rar
- Editor下载非常好用的工具
- 基于matlab实现的NALM锁模激光器仿真,非线性环路反射镜锁模获得飞秒激光脉冲.rar
- 基于matlab实现的mimo空时编码STBC,以最大似然值算法做检测.rar
- 基于matlab实现的交通分配的GUI程序代码.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈