Sphere,java,mvc 计算球的体积和表面积

mvc模式介绍

 

• 模型-视图-控制器 (Model-View- Controller,MVC ) 模式将一个交互式应用程序分成 3 个组件 .
– 模型:包含核心功能和数据。
– 视图:向用户显示信息。
– 控制器:处理用户输入。
• 视图和控制器组成了用户接口。
• 变更 - 传播机制保证了模型和用户接口之间的一致性。

 

 

 

 

本文要实现的Java应用程序是当用户在图形化用户界面输入一个球体的半径时,程序将显示该球体的体积与表面积。

 

• 该程序主要由三个类构成 :
– Sphere 类扮演 Model 的角色
– TextView 类为 View 角色

SphereWindow类为Controller角色。

 

 

• Model 类 Sphere ,必须扩展 Observable 类,
– 在 Observable 类中,方法 addObserver () 将视图与模型相关联
–当模型状态改变时,通过方法notifyObservers()通知视图。
Sphere.java

 

 

TextView.java

 

 

SphereWindow类作为Controller,它主要新建Model与View,将view与Model相关联,并处理事件

 

 

GraphicsView.java

 

  

 

 

SphereFrame.java

 

Java实现一个模型、两个视图两个控制器功能软件,即采用MVC模式或者说是观察者模式,本程序通过输入体半径,显示体形状,面积体积Sphere.java package Model; import java.util.Observable; public class Sphere extends Observable { private double radius;//体半径 private double area;//体面积 private double volume;//体积 public Sphere() { radius=100d; area=4*Math.PI*Math.pow(radius, 2); volume=4*Math.PI*Math.pow(radius, 3)/3; } public double getRadius() { return radius; } public double getArea() { return area; } public double getVolume() { return volume; } public void setRadius(double radius) { this.radius = radius; this.area = 4*Math.PI*Math.pow(radius, 2); this.volume=4*Math.PI*Math.pow(radius, 3)/3; this.setChanged(); this.notifyObservers(); } } textView.java package View; import java.util.Observer; import java.util.Observable; import java.text.NumberFormat; import javax.swing.*; import Controller.TextController; import Model.Sphere; import java.awt.*; import java.awt.event.*; public class TextView extends JPanel implements Observer { private JLabel radiusLab;//提示用户输入体半径 private JTextField radiusTextField;//接受用户输入体半径 //private JLabel radiusRang; private JLabel areaLab;//显示体面积 private JTextField areaTextField;//显示输入体半径对应面积 private JLabel volumeLab;//显示体积 private JTextField volumeTextField;//显示输入体半径对应体积 public TextView() { try { Init(); } catch(Exception e) { e.printStackTrace(); } } private void Init() throws Exception { radiusLab=new JLabel("体半径"); radiusLab.setForeground(new Color(0,165,168)); //radiusRang=new JLabel("[0-200]"); radiusTextField = new JTextField(12); radiusTextField.setForeground(new Color(223,100,158)); radiusTextField.setBackground(new Color(210,204,230)); areaLab=new JLabel("体面积"); areaLab.setForeground(new Color(0,165,168)); areaTextField = new JTextField(12); areaTextField.setBackground(new Color(193,219,219)); areaTextField.setEditable(fal

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 3

打赏作者

wei_wei_hnu

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值