日常生活中,人们需要对某些常见图形和几何体做计算面积,体积,周长等相关计算。设计一个形状计算器,完成此功能。通过对菜单的选择,可以对不同的形状进行计算。

1 作业中的接口与类

2 抽象类用于所有空间实现JPANE

package comprehensive;import javax.swing.JPanel;
import javax.swing.JTextField;public abstract class AbstractPanel extends JPanel {private static final long serialVersionUID = 1L;public abstract JTextField getInputTextField();
}2 通用接口和抽象了

// 通用抽象类
package comprehensive;
public abstract class Shape {
public abstract double area();
}

//通用接口
package comprehensive;
public interface cal {
final double PI=3.14;
double perimeter();
}


3 圆形矩形三角形圆柱的JPANE及实现类
1)接口 及实现类

//圆形jpane
package comprehensive;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.text.DecimalFormat;public class CirclePanel extends AbstractPanel {/*** */private static final long serialVersionUID = 1L;private JTextField txtradius;private JTextField txtpre;private JTextField txtarea;private JTextField input;  //用于获取当前获得焦点的文本框JButton btncal,btnclear;/*** 创建圆形计算面板.*/public CirclePanel() {//    圆面板设为网格布局方式,屏蔽setSize方法设置的大小,使用setPreferredSize(new Dimension(200, 220))设置大小setLayout(new GridLayout(4, 1, 0, 0));//设置半径信息面板 JPanel panelradius = new JPanel();add(panelradius);JLabel lblradius = new JLabel("圆的半径是");panelradius.add(lblradius);txtradius = new JTextField();txtradius.addFocusListener(new Handle());panelradius.add(txtradius);txtradius.setColumns(10);//设置放置按钮的面板JPanel panelbutton = new JPanel();add(panelbutton); btncal = new JButton("计算");panelbutton.add(btncal);btnclear = new JButton("清除");panelbutton.add(btnclear);    JPanel panelper = new JPanel();add(panelper);//设置显示周长信息的面板JLabel lblpre = new JLabel("圆的周长是");panelper.add(lblpre); txtpre = new JTextField();panelper.add(txtpre);txtpre.setColumns(10);//设置显示面积信息的面板JPanel panelarea = new JPanel();add(panelarea);JLabel lblarea = new JLabel("圆的面积是");panelarea.add(lblarea);txtarea = new JTextField();panelarea.add(txtarea);txtarea.setColumns(10);//为“计算”按钮和“清除”按钮设置监听btnclear.addActionListener(new ActionListener() {//清除两个文本框中信息@Overridepublic void actionPerformed(ActionEvent e) {txtarea.setText("");txtpre.setText("");txtradius.setText("");}});btncal.addActionListener(new ActionListener() {//计算并显示在文本框中@Overridepublic void actionPerformed(ActionEvent e) {double r=Double.parseDouble(txtradius.getText());Circle cir=new Circle(r);double ar=cir.area();String formatAr=new DecimalFormat(".##").format(ar);double per=cir.perimeter();String formatPer=new DecimalFormat(".##").format(per);txtpre.setText(formatPer);txtarea.setText(formatAr);}});}
class Handle extends FocusAdapter{public void focusGained(FocusEvent e) {input=(JTextField) e.getSource();   //设置输入文本框为当前获取焦点的文本框}
}public JTextField getInputTextField(){return input;   //该方法在keyPanel中调用,用于设置接收输入的文本框}
}
//圆形计算接类
package comprehensive;
public class Circle extends Shape implements cal{private double radius;public Circle(double radius) {super();this.radius = radius;}public double perimeter() {return 2*Math.PI*radius;}public double area() {return radius*radius*PI;}
}
//Cyiner.java
package comprehensive;public class Cyiner extends Shape implements cal {private double radius;private double height;public Cyiner(double radius,double height) {super();this.radius = radius;this.height = height;}public double perimeter() {return PI * radius * radius * height;}public double area() {double s1 = 2 * PI * radius * height;double s2 = PI * radius * radius;return s1 + s2;}
}
//CyPanel.java
package comprehensive;import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class CyPanel extends AbstractPanel {private static final long serialVersionUID = 1L;JTextField input;private JTextField txt_radius;private JTextField txt_height;private JTextField txt_per;private JTextField txt_area;JButton button_calc,button_clear;public CyPanel() {setLayout(new GridLayout(5, 1));Handle handle = new Handle();JPanel p1 = new JPanel();JLabel l1 = new JLabel("圆柱体的半径是");txt_radius = new JTextField(8);txt_radius.addFocusListener(handle);p1.add(l1);p1.add(txt_radius);add(p1);JPanel p2 = new JPanel();JLabel l2 = new JLabel("  圆柱体的高是  ");txt_height = new JTextField(8);txt_height.addFocusListener(handle);p2.add(l2);p2.add(txt_height);add(p2);JPanel p3 = new JPanel();button_calc = new JButton("计算");button_calc.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {Cyiner cy = new Cyiner(Double.parseDouble(txt_radius.getText()), Double.parseDouble(txt_height.getText()));txt_area.setText("" + cy.area());txt_per.setText("" + cy.perimeter());}});button_clear = new JButton("清除");button_clear.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {txt_area.setText(null);txt_height.setText(null);txt_per.setText(null);txt_radius.setText(null);}});p3.add(button_calc);p3.add(button_clear);add(p3);JPanel p4 = new JPanel();JLabel l3 = new JLabel("圆柱体的体积是");txt_per = new JTextField(10);p4.add(l3);p4.add(txt_per);add(p4);JPanel p5 = new JPanel();JLabel l4 = new JLabel("圆柱体的面积是");txt_area = new JTextField(10);p5.add(l4);p5.add(txt_area);add(p5);}public JTextField getInputTextField() {return input;}class Handle extends FocusAdapter{public void focusGained(FocusEvent e) {input=(JTextField) e.getSource();   //设置输入文本框为当前获取焦点的文本框}}}
//Triangle.java
package comprehensive;public class Triangle extends Shape implements cal{private double a,b,c;public Triangle(double x,double y,double z) {super();a = x;b = y;c = z;}public double perimeter() {return a + b + c;}public double area() {double p = perimeter() / 2;double s = Math.sqrt(p * (p-a) * (p-b) * (p-c));return s;}
}
//TrianglePanel.java
package comprehensive;import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class TrianglePanel extends AbstractPanel {private static final long serialVersionUID = 1L;private JTextField txt_a;private JTextField txt_b;private JTextField txt_c;private JTextField txtpre;private JTextField txtarea;private JTextField input;  //用于获取当前获得焦点的文本框JButton btncal,btnclear;public TrianglePanel() {setLayout(new GridLayout(6, 1));JPanel pan = new JPanel();JLabel l1 = new JLabel("第一条边长是");txt_a = new JTextField(8);pan.add(l1);pan.add(txt_a);add(pan);JPanel p2 = new JPanel();JLabel l2 = new JLabel("第二条边长是");txt_b = new JTextField(8);p2.add(l2);p2.add(txt_b);add(p2);JPanel p3 = new JPanel();JLabel l3 = new JLabel("第三条边长是");txt_c = new JTextField(8);p3.add(l3);p3.add(txt_c);add(p3);Handle handle = new Handle();Handles handles = new Handles();txt_a.addFocusListener(handle);txt_b.addFocusListener(handle);txt_c.addFocusListener(handle);JPanel p4 = new JPanel();btncal = new JButton("计算");btnclear = new JButton("清除");p4.add(btncal);p4.add(btnclear);add(p4);btncal.addActionListener(handles);btnclear.addActionListener(handles);JPanel p5 = new JPanel();JLabel l4 = new JLabel("三角形的周长是");txtpre = new JTextField(10);p5.add(l4);p5.add(txtpre);add(p5);JPanel p6 = new JPanel();JLabel l5 = new JLabel("三角形的面积是");txtarea = new JTextField(10);p6.add(l5);p6.add(txtarea);add(p6);}class Handle extends FocusAdapter{public void focusGained(FocusEvent e) {input=(JTextField) e.getSource();   //设置输入文本框为当前获取焦点的文本框}}public JTextField getInputTextField(){return input;   //该方法在keyPanel中调用,用于设置接收输入的文本框}class Handles implements ActionListener{public void actionPerformed(ActionEvent arg0) {if(arg0.getSource() == btncal) {Triangle t = new Triangle(Double.parseDouble(txt_a.getText()),Double.parseDouble(txt_b.getText()), Double.parseDouble(txt_c.getText()));txtarea.setText("" + t.area());txtpre.setText("" + t.perimeter());}if(arg0.getSource() == btnclear) {txt_a.setText(null);txt_b.setText(null);txt_c.setText(null);txtarea.setText(null);txtpre.setText(null);}}}
}
//Rect.java
package comprehensive;
public class Rect extends Shape implements cal{private double len;private double wedth;public Rect(double len,double wedth) {super();this.len = len;this.wedth = wedth;}public double perimeter() {return len + wedth;}public double area() {return len * wedth;}
}
//RectPanel.java
package comprehensive;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;public class RectPanel extends AbstractPanel {private static final long serialVersionUID = 1L;private JTextField txtlength,txtwidth;private JTextField txtpre;private JTextField txtarea;private JTextField input;  //用于获取当前获得焦点的文本框JButton btncal,btnclear;/*** 创建圆形计算面板.*/public RectPanel() {//    圆面板设为网格布局方式,屏蔽setSize方法设置的大小,使用setPreferredSize(new Dimension(200, 220))设置大小setLayout(new GridLayout(5, 1, 0, 0));//设置长度信息面板 JPanel panellength = new JPanel();add(panellength);JLabel lbllength = new JLabel("矩形的长是");panellength.add(lbllength);txtlength = new JTextField();txtlength.addFocusListener(new Handle());panellength.add(txtlength);txtlength.setColumns(10);//设置宽度信息面板  JPanel panelwidth= new JPanel();add(panelwidth);JLabel lblwidth = new JLabel("矩形的宽是");panelwidth.add(lblwidth);txtwidth = new JTextField();panelwidth.add(txtwidth);txtwidth.addFocusListener(new Handle());txtwidth.setColumns(10);//设置放置按钮的面板JPanel panelbutton = new JPanel();add(panelbutton);btncal = new JButton("计算");panelbutton.add(btncal);btncal.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {double a = Double.parseDouble(txtlength.getText());double b = Double.parseDouble(txtwidth.getText());Rect rect = new Rect(a, b);txtpre.setText(""+rect.perimeter());txtarea.setText(""+rect.area());}});btnclear = new JButton("清除");panelbutton.add(btnclear); btnclear.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {txtarea.setText(null);txtlength.setText(null);txtwidth.setText(null);txtpre.setText(null);}});JPanel panelper = new JPanel();add(panelper);//设置显示周长信息的面板JLabel lblpre = new JLabel("矩形的周长是");panelper.add(lblpre);  txtpre = new JTextField();panelper.add(txtpre);txtpre.setColumns(10);//设置显示面积信息的面板JPanel panelarea = new JPanel();add(panelarea);JLabel lblarea = new JLabel("矩形的面积是");panelarea.add(lblarea);txtarea = new JTextField();panelarea.add(txtarea);txtarea.setColumns(10);}class Handle extends FocusAdapter{public void focusGained(FocusEvent e) {input=(JTextField) e.getSource();   //设置输入文本框为当前获取焦点的文本框}}public JTextField getInputTextField(){return input;   //该方法在keyPanel中调用,用于设置接收输入的文本框}}
//输入键盘
package comprehensive;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.Border;public class KeyPanel extends JPanel {private static final long serialVersionUID = 1L;/*** 创建输入键盘面板*/JButton[] keyButton=new JButton[12];String[] num={"1","2","3","4","5","6","7","8","9","0",".","BackSpace"};AbstractPanel selectedPanel;  //表示当前选择的图形面板,键入数据要传递到当前选择的面板中JTextField inputTextField;public KeyPanel() {setPreferredSize(new Dimension(350, 230));setLayout(new GridLayout(4,3));Border lb=BorderFactory.createLineBorder(Color.gray, 2);setBorder(lb);Handle handle=new Handle();for(int i=0;i<12;i++){keyButton[i]=new JButton(num[i]);keyButton[i].setFont(new Font("Arial",Font.BOLD,15));keyButton[i].setForeground(Color.BLACK);keyButton[i].addActionListener(handle);add(keyButton[i]);}}
class Handle implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {JButton button=(JButton)e.getSource();  //获取事件源,看是哪个按钮被按下inputTextField=selectedPanel.getInputTextField();   //从传递来的形状面板中获取当前得到焦点的文本框inputNumber(inputTextField, button);  //调用inputNumber方法,在该文本框中输入数据    }
}
public void setSelectedPanel(AbstractPanel selected){selectedPanel = selected;
}public void  inputNumber(JTextField tf,JButton button){  //根据不同事件源在文本框中显示不同信息String oldString=tf.getText();  //获取文本框中已有信息if(oldString==null){tf.setText(" ");}String subStr=oldString.substring(0, oldString.length());  //根据不同事件源的不同情况,设置不同的值String newString=button.getText();   if(newString.equals("BackSpace")){tf.setText(subStr);}else if(newString.equals(".")){tf.setText(oldString+".");}else{tf.setText(oldString+newString);}
}}
//主运行程序 采用网格布局管理方式
package comprehensive;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;public class CalculatorWindow extends JFrame {private static final long serialVersionUID = 1L;private KeyPanel keypanel;private AbstractPanel cirPanel,rectPanel,trianPanel,cyPanel;private CardLayout card;//菜单选项需要进行事件处理JMenuItem menuExit;JRadioButtonMenuItem menuCircle, menuRect,menuTangle,menuCyinder;JPanel panelWest;  //根据选项显示面板/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {CalculatorWindow frame = new CalculatorWindow();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the frame.*/public CalculatorWindow() {setTitle("图形计算器");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 590, 306);Container con=getContentPane();//con.setLayout(new GridLayout(1,2));JMenuBar menuBar = new JMenuBar();setJMenuBar(menuBar);Handle handle=new Handle();//添加“文件”菜单、菜单项及为菜单项添加监听JMenu menuFile = new JMenu("文件");menuBar.add(menuFile);menuExit = new JMenuItem("退出");menuExit.addActionListener(handle);menuFile.add(menuExit);//添加“计算”菜单、菜单项及为菜单项添加监听JMenu menuCalcu = new JMenu("计算");menuBar.add(menuCalcu);ButtonGroup group = new ButtonGroup();menuCircle = new JRadioButtonMenuItem("圆形");menuCircle.addActionListener(handle);menuCalcu.add(menuCircle);menuRect = new JRadioButtonMenuItem("矩形");menuRect.addActionListener(handle);menuCalcu.add(menuRect);menuTangle = new JRadioButtonMenuItem("三角形");menuTangle.addActionListener(handle);menuCalcu.add(menuTangle);menuCyinder = new JRadioButtonMenuItem("圆柱体");menuCyinder.addActionListener(handle);menuCalcu.add(menuCyinder);group.add(menuCyinder);group.add(menuTangle);group.add(menuRect);group.add(menuCircle);//主窗口左方面板为卡片布局方式,按需求显示形状面板panelWest = new JPanel();panelWest.setPreferredSize(new Dimension(220, 0));panelWest.setSize(220, 280);card = new CardLayout();panelWest.setLayout(card);//添加卡片面板,并为其取卡片名cirPanel=new CirclePanel();rectPanel=new RectPanel();trianPanel = new TrianglePanel();cyPanel = new CyPanel();panelWest.add("0",cirPanel);panelWest.add("1",rectPanel);panelWest.add("2",trianPanel);panelWest.add("3",cyPanel);con.add(panelWest,BorderLayout.WEST);//主窗口右侧面板中显示keyPanel,用于输入数字JPanel panelEast = new JPanel();panelEast.setPreferredSize(new Dimension(360, 0));keypanel=new KeyPanel();keypanel.setSelectedPanel(cirPanel);  //设置启动时,显示的图形面板为cirPanel,通过参数传递给keypanel,用于接收输入panelEast.add(keypanel);con.add(panelEast,BorderLayout.EAST);   }//ActionEvent事件处理,根据菜单选项,显示对应卡片class Handle implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource() == menuExit){System.exit(0);}else if(e.getSource() == menuCircle){card.show(panelWest, "0");keypanel.setSelectedPanel(cirPanel);}else if(e.getSource() == menuRect){card.show(panelWest, "1");keypanel.setSelectedPanel(rectPanel);}else if(e.getSource() == menuTangle) {card.show(panelWest, "2");keypanel.setSelectedPanel(trianPanel);}else if(e.getSource() == menuCyinder) {card.show(panelWest, "3");keypanel.setSelectedPanel(cyPanel);}}}}

运行结果





日常生活中,人们需要对某些常见图形和几何体做计算面积,体积,周长等相关计算。设计一个形状计算器,完成此功能。通过对菜单的选择,可以对不同的形状进行计算。相关推荐

  1. 计算机程序设计在日常生活中的应用,《走进程序设计》教学设计

    原载于<中国信息技术教育>2016年第7期 江苏省盐城市毓龙路实验学校顾 霞 江苏省盐城市教育科学研究院曹恒来 一.学习者分析 通过前面学习,八年级学生已具备一定的观察.思考.分析和解决问 ...

  2. 生物识别技术在我们日常生活中的应用

    在数字时代,对安全性的需求比以往任何时候都高,因为我们大多数人将很大一部分生活都放在移动设备上.因此,移动电话和技术开发人员将生物识别技术集成到这些设备中,以防止盗窃并确保我们的财物安全.在本文中,我 ...

  3. 日常生活中使用的台式计算机,台式电脑鼠标不动应该怎么办

    在日常生活中,我们使用台式电脑有时候会遇到鼠标不动的问题,有些用户不知道怎么做,该如何解决台式电脑鼠标不动这个难题呢?下面是小编收集的关于台式电脑鼠标不动的解决步骤,希望对你有所帮助. 台式电脑鼠标不 ...

  4. 人工智能在日常生活中的10种用途

    来源:IEEE电气电子工程师 人工智能最近取得了许多惊人的进步,它已经在潜移默化地影响着我们周围的世界. 2022年,人工智能在公共使用领域取得了惊人的新进展.一幅人工智能生成的图像甚至在与人类艺术家 ...

  5. 计算机在我们日常生活中越来越重要英语翻译,职高英语翻译练习 翻译练习二...

    职高英语翻译练习 翻译练习二 职高英语翻译练习翻译练习二 1. 他每天乘公交车上学 2. 请你把门打开好吗? 3. 我期盼着你的来信 4. 昨天,他动身去北京了 5. 当我们正兴致勃勃地谈论着,老师制 ...

  6. 大学物理实验-日常生活中光照强度实验

    实验项目名称:日常生活中光照强度实验          实验目的: 1.了解光照强度相关概念,利用室内光强计算公式学会计算室内光强,了解灯泡高度以及有无光罩对光照强度的影响 2.学会使用phyphox ...

  7. 日常生活中如何获得低咖啡因的茶叶

    我是一名程序员 这篇文章主要关注如何喝茶更加健康,而不是口感好不好. 我们的目标是: 留下尽可能多的茶多粉,去除尽可能多的咖啡因. 我们都知道咖啡因对心脏不好.我翻阅了以下文献记载. [1]中最低咖啡 ...

  8. 在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序。

    在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序. import os path=input('请输入文件路径(结尾加上/):') #获取该 ...

  9. linux在生活中的应用例子,LINUX操作系统在教师学生日常生活中的应用(全).docx

    WORD格式 专业资料整理 4.LINUX操作系统在教师学生日常生活中的应用 随着网络的快速发展,网络的安全也成为了广大计算机用户的第一头疼事. 也是因为这个原因 linux 操作系统的价值就更加能体 ...

最新文章

  1. [笔记]React+Cordova踩坑
  2. 企业架构 - 组织角色和技能
  3. 深入理解计算机系统学后感,深入理解计算机系统(读书笔记)
  4. 一个SAP开发人员的养蚕流水帐
  5. Java开发知识体系!我用2个月的时间破茧成蝶
  6. swagger core 和 swagger ui 如何关联【窥探】
  7. Javascript里的sleep()方法
  8. 中学编程_您可以从30岁的第一次编程采访中学到什么
  9. 漫画:为什么一到年底,部分网站就会出现日期混乱?
  10. Cocos2d-x 3.2 大富翁游戏项目开发-第八部分 角色的散步路径
  11. 51单片机学习 光敏电阻传感器实验
  12. Mac大小写切换需长按capslock键解决办法
  13. 【书影观后感 四】《围城》十年
  14. 手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器
  15. 几种kafka多线程消费方式
  16. week6:Diagnosing Bias vs. Variance难点记录
  17. Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!
  18. php考勤系统微信小程序
  19. java获取本周第一天的日期
  20. 如何将图片批量合并成PDF?

热门文章

  1. Smart Jump
  2. Asynchronous example Thrift in Java
  3. 阿林要振作,一定要无事平安!
  4. 西安网吧电信网通双线路接入方案(转)
  5. 02数据存入数据库-视频网站-实践-scrapy框架-python
  6. 设置远程服务器共享本地磁盘
  7. (附源码)spring boot火车票订票系统 毕业设计171538
  8. ue4-runtime_ubuntu_docker_使用教程方法
  9. agx 安装ros opencv_【ROS开源】Jetson Nano阿克曼转向机器人
  10. STM32WU55蓝牙开发学习笔记(2)-协议栈更新