文档库 最新最全的文档下载
当前位置:文档库 › java课程设计模板(windows计算器)

java课程设计模板(windows计算器)

《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 = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};

private final String[] mOp = {"MC","MR","MS","M+"};

private final String[] rOp = {"BackSpace","CE","C"};

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);

panel.add(panel1,BorderLayout.NORTH);

panel.add(panel2,BorderLayout.WEST);

panel.add(panel3);

this.add(panel);

this.setResizable(false);

this.setLocationRelativeTo(null);

}

//设置侦听器

public ActionListener getActionListener()

{

return new ActionListener()

{

public void actionPerformed(final ActionEvent e)

{

final String cmd = e.getActionCommand();

String result = null;

try

{

result = service.callMethod(cmd,textField1.getText());

}

catch(final Exception ex)

{

System.out.println(ex.getMessage());

}

if(opString.indexOf(cmd) != -1)

{

textField2.setText(textField2.getText()+textField1.getText()+cmd);

}

else if(cmd.equals("="))

{

textField2.setText("");

}

else if(cmd.indexOf("MC") == 0)

button.setText("");

else

if(cmd.indexOf("M") == 0 && service.getStore() > 0)

button.setText("M");

if(result != null)

textField1.setText(result);

}

};

}

//初始化输入框

private JTextField getTextField()

{

textField1 = new JTextField();

textField1.setBorder(new EmptyBorder(0,0,0,0));

textField1.setText("0");

textField1.setHorizontalAlignment(JTextField.RIGHT);

textField1.setEditable(false);

textField1.setOpaque(false);

textField2 = new JTextField();

textField2.setBorder(new EmptyBorder(0,0,0,0));

textField2.setHorizontalAlignment(JTextField.RIGHT);

textField2.setEditable(false);

textField2.setOpaque(false);

return null;

}

//获得计算器的存储显示等按键

private JButton[] getMButton()

{

final JButton[] result = new JButton[this.mOp.length+1];

result[0] = this.button;

for(int i = 0;i < this.mOp.length;i++)

{

final JButton b = new JButton(this.mOp[i]);

b.addActionListener(getActionListener());

b.setForeground(Color.black);

result[i+1] = b;

}

return result;

}

//获得计算器的退格清零等按键

private JButton[] getRButton()

{

相关文档
相关文档 最新文档