java语言使用Swing实现简单的计算器功能

1.计算类

public class Calculator {

/**

* @return : double  返回浮点型数值

* @param  : double a,double b, String symbol

* @method : 对两个数进行四则运算

* @description :传递两个double型参数,一个运算符(+,-,×,÷),

*          根据运算符对这两个数进行计算。

*/

public static double calculate(double a,double b, String symbol){

double number=a+b;        //计算的结果

if (symbol.equals("+")) { //加法

number=add(a, b);

}

else if (symbol.equals("-")) {//减法

number=minus(a, b);

}

else if (symbol.equals("×")) {//乘法

number=multiply(a, b);

}

else if (symbol.equals("÷")) {//除法

number=division(a, b);

}

else {

System.out.println("输入错误!");

}

return number;

}

/**

* @method  :求两数之和

*/

public static double add(double a,double b){

return a+b;

}

/**

* @method  :求两数之差

*/

public static double minus(double a,double b){

return a-b;

}

/**

* @method  :求两数之积

*/

public static double multiply(double a,double b){

return a*b;

}

/**

* @method  :求一个数除以一个数的余数

*/

public static double division(double a,double b){

return a/b;

}

}

2.窗体类(JFrame)

import javax.swing.JFrame;

public class CFrame  extends JFrame{

private static final long serialVersionUID = 1L;

//窗体宽高

final int WIDTH=270;

final int HEIGHT=460;

/**

* 构造方法:创建对象即可实现

*/

public CFrame(){

setLayout(null);            //设置绝对布局

setVisible(true);            //设置可见

setSize(WIDTH,HEIGHT);      //设置窗体宽高

setLocationRelativeTo(null); //设置居中显示

setResizable(false);        //不可调整大小

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //点击关闭

setContentPane(new CPanel());  //添加面板到窗体

}

public static void main(String[] args) {

new CFrame();//创建窗体匿名对象实例

}

}

3.面板类

import java.awt.Font;

import javax.swing.JButton;

import javax.swing.JPanel;

import javax.swing.JTextArea;

public class CPanel extends JPanel{

//private static final long serialVersionUID = 1L;

//第一个组件初始位置

static final int X=10;  //初始位置 :X

static final int Y=10;  //初始位置 :Y

//面板宽高

static final int PANEL_WIDTH=250;  //面板宽度

static final int PANEL_HEIGHT=360; //面板高度

    //文本宽高

static final int TEXT_WIDTH=240;  //文本域宽度

static final int TEXT_HEIGHT=100; //文本域高度

//按钮宽高

static final int BUTTON_WIDTH=50;  //按钮宽度

static final int BUTTON_HEIGHT=50;  //按钮高度

//按钮间距

static final int INTERVAL=10;      //间距距离

//两个按钮组件的水平距离

static final int BUTTON_X=X+BUTTON_WIDTH;

//两个按钮组件的垂直距离

static final int BUTTON_Y=Y+TEXT_HEIGHT;

//创建文本域,用于显示计算的值

static JTextArea showArea=new JTextArea();

//设置字体

Font  font =new Font("黑体",1,15);

public CPanel(){

showArea.setBounds(X-5, Y,TEXT_WIDTH, TEXT_HEIGHT);    //设置文本框的初始位置(x,y)、大小(宽高)

showArea.setEditable(false);  //设置不可编辑,可编辑:true

showArea.setFont(font);      //设置字体

setBounds(1, 1,PANEL_WIDTH, PANEL_HEIGHT);//设置面板在窗体的位置 

add(showArea);        //添加文本框到面板

setLayout(null);      //设置绝对定位布局

//1第一行按钮

//1.1创建按钮

JButton oneButton=new JButton("1");

JButton twoButton=new JButton("2");

JButton threeButton=new JButton("3");

    JButton addButton=new JButton("+");

    //1.2设置按钮在面板中的位置

oneButton.setBounds(      X,                BUTTON_Y+INTERVAL, BUTTON_WIDTH, BUTTON_HEIGHT);

twoButton.setBounds(  BUTTON_X+INTERVAL,    BUTTON_Y+INTERVAL, BUTTON_WIDTH, BUTTON_HEIGHT);

threeButton.setBounds((BUTTON_X*2)+INTERVAL, BUTTON_Y+INTERVAL, BUTTON_WIDTH, BUTTON_HEIGHT);

addButton.setBounds((BUTTON_X*3)+INTERVAL,  BUTTON_Y+INTERVAL, BUTTON_WIDTH, BUTTON_HEIGHT);

//1.3添加按钮到面板

add(oneButton);

add(twoButton);

add(threeButton);

add(addButton);

/** 2第二行按钮          */

//2.1创建按钮

JButton fourButton=new JButton("4");

JButton fiveButton=new JButton("5");

JButton sixButton=new JButton("6");

JButton minusButton=new JButton("-");

//2.2设置按钮在面板中的位置

fourButton.setBounds(      X,            (BUTTON_Y+BUTTON_HEIGHT)+INTERVAL*2, BUTTON_WIDTH, BUTTON_HEIGHT);

fiveButton.setBounds(BUTTON_X+INTERVAL,    (BUTTON_Y+BUTTON_HEIGHT)+INTERVAL*2, BUTTON_WIDTH, BUTTON_HEIGHT);

sixButton.setBounds ((BUTTON_X*2)+INTERVAL, (BUTTON_Y+BUTTON_HEIGHT)+INTERVAL*2, BUTTON_WIDTH, BUTTON_HEIGHT);

minusButton.setBounds((BUTTON_X*3)+INTERVAL, (BUTTON_Y+BUTTON_HEIGHT)+INTERVAL*2, BUTTON_WIDTH, BUTTON_HEIGHT);

//2.3添加按钮到面板

add(fourButton);

add(fiveButton);

add(sixButton);

add(minusButton);

//第三行按钮

//3.1创建按钮

JButton sevenButton=new JButton("7");

JButton eightButton=new JButton("8");

JButton nineButton=new JButton("9");

JButton multiplyButton=new JButton("×");

//3.2设置按钮在面板中的位置

sevenButton.setBounds(      X,                (BUTTON_Y+BUTTON_HEIGHT*2)+INTERVAL*3, BUTTON_WIDTH, BUTTON_HEIGHT);

eightButton.setBounds(BUTTON_X+INTERVAL,      (BUTTON_Y+BUTTON_HEIGHT*2)+INTERVAL*3, BUTTON_WIDTH, BUTTON_HEIGHT);

nineButton.setBounds((BUTTON_X*2)+INTERVAL,    (BUTTON_Y+BUTTON_HEIGHT*2)+INTERVAL*3, BUTTON_WIDTH, BUTTON_HEIGHT);

multiplyButton.setBounds((BUTTON_X*3)+INTERVAL,(BUTTON_Y+BUTTON_HEIGHT*2)+INTERVAL*3, BUTTON_WIDTH, BUTTON_HEIGHT);

//3.3添加按钮到面板

add(sevenButton);

add(eightButton);

add(nineButton);

add(multiplyButton);

//4第四行按钮

//4.1创建按钮

JButton pointButton=new JButton(".");

JButton zeroButton=new JButton("0");

JButton equalButton=new JButton("=");

JButton divisionButton=new JButton("÷");

//4.2设置按钮在面板上的位置

pointButton.setBounds(      X,                (BUTTON_Y+BUTTON_HEIGHT*3)+INTERVAL*4, BUTTON_WIDTH, BUTTON_HEIGHT);

zeroButton.setBounds(        BUTTON_X+INTERVAL,(BUTTON_Y+BUTTON_HEIGHT*3)+INTERVAL*4, BUTTON_WIDTH, BUTTON_HEIGHT);

equalButton.setBounds(  (BUTTON_X*2)+INTERVAL,(BUTTON_Y+BUTTON_HEIGHT*3)+INTERVAL*4, BUTTON_WIDTH, BUTTON_HEIGHT);

divisionButton.setBounds((BUTTON_X*3)+INTERVAL,(BUTTON_Y+BUTTON_HEIGHT*3)+INTERVAL*4, BUTTON_WIDTH, BUTTON_HEIGHT);

//4.3添加按钮到面板

add(pointButton);

add(zeroButton);

add(equalButton);

add(divisionButton);

JButton resetButton=new JButton("C");

add(resetButton);

resetButton.setBounds(X,(BUTTON_Y+BUTTON_HEIGHT*4)+INTERVAL*5, BUTTON_WIDTH*4+30, BUTTON_HEIGHT);

//5.侦听所有按钮

ListeningJButton listen=new ListeningJButton();

listen.listenButton(this, oneButton);

listen.listenButton(this, twoButton);

listen.listenButton(this, threeButton);

listen.listenButton(this, fourButton);

listen.listenButton(this, fiveButton);

listen.listenButton(this, sixButton);

listen.listenButton(this, sevenButton);

listen.listenButton(this, eightButton);

listen.listenButton(this, nineButton);

listen.listenButton(this, zeroButton);

listen.listenButton(this, addButton);

listen.listenButton(this, minusButton);

listen.listenButton(this, multiplyButton);

listen.listenButton(this, divisionButton);

listen.listenButton(this, resetButton);

listen.listenButton(this, equalButton);

listen.listenButton(this, pointButton);

}

}

4.侦听类

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

public class ListeningJButton {

static double number1=0;  //记录第一个数

static double number2=0;  //记录第二个数

static double total=-1;    //记录两个数的值

static String symbol="+";  //记录按下了哪个运算符

int count=0;              //记录按下除=号意外运算符点击的次数:主要作用,判断它是不是第一次执行

/**

* @param  :CPanel panel,JButton button

* @method  :侦听CPanel面板上的按钮的方法()

* @description :该方法传递了两个参数,CPanel 类参数主要是为了获取该类面板上文本框的内容,当然,也可以不设置这个参数

*          因为文本框该文本框是静态对象,可以直接使用类.对象来调用。

*

*/

public void listenButton(CPanel panel,JButton button){

//侦听按钮

button.addActionListener(new ActionListener() {

String contact="";    //定义字符串对象,存储从文本框上获取的内容

public void actionPerformed(ActionEvent e) {

String value=e.getActionCommand(); //获取点击的按钮值

//点击+,-,×,÷时执行

if (value.equals("+")||value.equals("-")||value.equals("×")||value.equals("÷")) {

if (count>0) {//如果是第1+n次点击

CPanel.showArea.setText(String.valueOf(total));//把结果设为第一个数

}

symbol=value;  //记录符号

count++;   

}

//点击等于号时进行计算

if (value.equals("=")) {

//获取文本框内容

contact=CPanel.showArea.getText();

//只有输入内容时才会执行

if (contact.length()>0||symbol!="+"&&symbol!="-"&&symbol!="×"&&symbol!="÷") {

//取出第1-2个数

number1=getNumber(contact, 1);

    number2=getNumber(contact, 2);

    total=Calculator.calculate(number1, number2, symbol);

    symbol="=";

value=String.valueOf(symbol+total);

}

//计算总值

}

//显示内容到文本框

CPanel.showArea.append(value);

//清空所有内容

if (value.equals("C")) {

//全部重置

CPanel.showArea.setText("");

count=0;

symbol="+";

number1=0;

number2=0;

}

}

});

}

/**

* @method :获取第x个数

* @param  :String ,int x

* @exception:该方法获取字符串中的第x个数值,每个数值一某个字符结束。

*          比如:123+456,第一个数是123,第二个数是456

*          当x=2时,返回456。

*/

public static  double getNumber(String string,int x){

double number=0;    //定义返回值

int sign=1;        //标记第几个数

String s="[0-9]";  //正则表达式:只能是数字

StringBuilder joint=new StringBuilder();//创建字符串拼接对象

//1.循环遍历每一个字符

for (int i = 0; i < string.length(); i++) {

//2.从0开始获取第i个字

String  c=String.valueOf(string.charAt(i));

//如果c为数字,

if (c.matches(s)||c.equals(".")) {

joint.append(c);

}

//如果c不为数字

if (!c.matches(s)&&i!=0&&!c.equals(".")) {

//如果sign>x:退出当前循环

if (sign>=x) {

break;

}

sign++; //自增

//清空拼接对象内的字符

joint.delete(0, joint.length());

}

}

number=Double.parseDouble(String.valueOf(joint));  //转换为double类型的数

return number;  //返回该数

}

}

代码能实现简单的四则运算,但还是有些BUG,以后有时间会完善的,新手上路,多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值