《JAVA程序设计》课程设计
简单计算器
姓 名: 陈凯昂 班 级: 物联网(二)班 学 号: 121210325 指导教师: 李玮瑶 成 绩: 完成时间: 2014.06.12
一、设计目的
使用Java的GUI图形用户界面编程设计并编写一个计算器程序,用户可以通过鼠标或者键盘操作输入参加运算的的数值和运算符,要求能进行加、减、乘、除等混合运算。
二、功能介绍
本程序能实现下列各项功能:
(1)实现加、减、乘、除等基本运算; (2)实现开方,百分率,倒数等运算;
(3)实现退格,清除,存储,读取存储数据等功能。
三、概要设计
3.1 自定义类说明
class CalFrame extends JFrame//自定义子类CalFrame继承于父类JFrame; class CalService//计算器计算方法; class MyMath//算数进度运算; public class Cal //主类; 3.2 方法定义说明
private final String[] ...//定义按键字符 private final JButton button//定义按键 private JPanel panel//定义面板 private JTextField//定义文本 private JTextArea//定义文本区域 private JButton[]//定义按键组
public void initialize()//初始化计算器界面
public ActionListener getActionListener()//设置侦听器
public void actionPerformed(final ActionEvent e)//设置动作事件 private JTextField getTextField()//初始化输入框
private JButton[] getMButton()//获取计算器的存储区显示等按键 private JButton[] getRButton()//获得计算器的退格清零等按键 private JButton[] getNButton()//获得计算器的加减乘除等其他按键 public void setTextArea(JTextArea textArea)//设置文本区域
public String callMethod(String cmd,String text)//调用该方法并返回计算结果
public String cal(String text,boolean isPercent)//用来结算加、减、乘、除法,并返回封装成String类型的结果,参数text是显示框中的内容,boolean代表是否有“%”运算
public String setReciprocal(String text)//计算倒数 public String sqrt(String text)//开方运算
public String setOp(String cmd,String text)//设置操作符
public String setNegative(String text)//设置正负数,text是正数是返回负数数字字符串,反之,返回正数数字字符串
public String catNum(String cmd,String text)//连接输入的数字,每次单击数字,都把新加数字追加到后面,并封装成字符串返回
public String backSpace(String text)//退后一个字符,并返回结果
public String mCmd(String cmd,String text)//用来实现“M+”“MC”“MR”“MS”等与存储有关的功能
public String clearAll()//清空所有计算结果 public String clear(String text)//清除上次计算结果
四、详细设计
4.1简单计算器界面设计 1、具体实现过程
本程序采用Calaframe子类继承于父类JFrame,采用BorderLayout边界布局和GridLayout网格布局,将面板添加到里面来布置文本区域以及按键区域。同时,设置监听器ActionListener来实现各个按键的动作功能。 2、关键代码设计
//导入组件
import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigDecimal; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel;
import javax.swing.JTextArea; import javax.swing.JTextField;
import javax.swing.border.EmptyBorder; //定义继承父类Jframe 的子类CalFrame class CalFrame extends JFrame {
private static final long serialVersionUID = -4043419751779156119L; privatef
inal
String[]
nOp
=
{\
private final String[] mOp = {\ private final String[] rOp = {\ private final String opString = \ private final JButton button = new JButton(); private final CalService service = new CalService(); private JPanel panel; private JTextField textField1; private JTextField textField2; private JTextArea textArea; private JButton[] mButton;
private JPanel panel1;//显示框放置区 private JPanel panel2;//按键组m放置区 private JButton[] rButton; private JPanel panel3;
private JPanel panel31;//按键组r放置区 private JButton[] nButton;
private JPanel panel32;//其他按键放置区
public CalFrame() {
super();//访问父类 initialize(); }
public void initialize()//初始化计算器界面 {
this.setTitle(\计算器 by陈凯昂\ panel = new JPanel();
panel.setLayout(new BorderLayout(10,10));
panel1 = new JPanel(new BorderLayout()); panel1.setBackground(Color.white); getTextField();
panel1.add(textField1,BorderLayout.CENTER); panel1.add(textField2,BorderLayout.NORTH);
panel2 = new JPanel(); mButton = getMButton();
panel2.setLayout(new GridLayout(5,1,0,5)); for(final JButton b:mButton) panel2.add(b);
panel3 = new JPanel();
panel3.setLayout(new BorderLayout(0,3));
rButton = getRButton(); panel31 = new JPanel();
panel31.setLayout(new GridLayout(1,3,3,0)); for(final JButton b: rButton)panel31.add(b);
nButton = getNButton(); panel32 = new JPanel();
panel32.setLayout(new GridLayout(4,5,3,3)); for(final JButton b: nButton)panel32.add(b);
panel3.add(panel31,BorderLayout.NORTH); panel3.add(panel32);