Java Swing 实现简单计算器

用Java实现一个简单的计算器, 用到java.swing包, 实现一个GUI的计算器.

swing包详解
代码如下:


import java.awt.FlowLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class Calculator {
	public static void main(String[] args) {
		Pane p = new Pane("Calculator");
		p.creatFrame();
	}
}

class Pane {
	String name;
	public final String button0 = "0";
	public final String button1 = "1";
	public final String button2 = "2";
	public final String button3 = "3";
	public final String button4 = "4";
	public final String button5 = "5";
	public final String button6 = "6";
	public final String button7 = "7";
	public final String button8 = "8";
	public final String button9 = "9";
	public final String button_add = "+";
	public final String button_sub = "-";
	public final String button_mul = "*";
	public final String button_div = "/";
	public final String button_dot = ".";
	public final String button_equ = "=";
	public final String button_del = "del";
	private double result;
	private String MidResult;
	TextField textField = new TextField(30);
	TextField textFieldResult = new TextField(30);
	Pane(String _name) {
		this.name = _name;
		this.result = 0;
		this.MidResult = "";
	}

	Pane() {
		this.result = 0;
		this.MidResult = "";
	}

	//对于button 的操作
	JButton ActionButtonInput(String buttonName) {
		JButton button = new JButton(buttonName);
		button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				MidResult += buttonName;
				textField.setText(MidResult);
				// System.out.println(buttonName);
			}
		});
		return button;
	}

	JButton ActionButtonEqu(String buttonName) {
		JButton button = new JButton(buttonName);
		button.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				calculate();
				textFieldResult.setText(Double.toString(result));
			}
		});
		return button;
	}
	
	JButton DelButton(String buttonName) {
		JButton button = new JButton(buttonName);
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				result = 0;
				MidResult = "";
				textField.setText(MidResult);
				textFieldResult.setText("");
			}
		});
		return button;
	}
	
	//计算输入的字符串
	double calculate() {
		
		//得到输入字符串的数字和操作符
		String regex0 = "(\\+)|(\\-)|(\\*)|(\\/)";
		String regex1 = "[0-9]+|([0-9]+|[0-9]+\\.[0-9]+)";
		String array[] = MidResult.split(regex0);
		String operator[] = MidResult.split(regex1);
		String operator1[] = new String[operator.length];
		
		//格式化operator数组
		int j = 0;
		for(int i = 0; i < operator.length; ++i) {
			if(operator[i].equals("."));
			else operator1[j++] = operator[i];
		}
		
		//计算结果
		double tresult = 0;
		for (int i = 0; i < array.length; ++i) {
			if (i == 0) {
				tresult = Double.parseDouble(array[i]);
			}		
			else {
				if (operator1[i].equals("+"))
					tresult += Double.parseDouble(array[i]);
				else if (operator1[i].equals("-"))
					tresult -= Double.parseDouble(array[i]);
				else if (operator1[i].equals("*"))
					tresult *= Double.parseDouble(array[i]);
				else if (operator1[i].equals("/"))
					tresult /= Double.parseDouble(array[i]);
				else continue;
			}
		}
		this.result = tresult;
		return result;
	}

	//创建JFrame窗体
	void creatFrame() {
		JFrame frame = new JFrame(name);
		frame.setLayout(new FlowLayout(FlowLayout.CENTER));
		frame.setSize(250, 275);
		frame.setVisible(true); // set visible -- true
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // set exit on close

	
		JPanel panelButtonFeild01 = new JPanel();
		panelButtonFeild01.add(ActionButtonInput(button7));
		panelButtonFeild01.add(ActionButtonInput(button8));
		panelButtonFeild01.add(ActionButtonInput(button9));
		panelButtonFeild01.add(ActionButtonInput(button_div));

		JPanel panelButtonFeild02 = new JPanel();
		panelButtonFeild02.add(ActionButtonInput(button4));
		panelButtonFeild02.add(ActionButtonInput(button5));
		panelButtonFeild02.add(ActionButtonInput(button6));
		panelButtonFeild02.add(ActionButtonInput(button_mul));

		JPanel panelButtonFeild03 = new JPanel();
		panelButtonFeild03.add(ActionButtonInput(button1));
		panelButtonFeild03.add(ActionButtonInput(button2));
		panelButtonFeild03.add(ActionButtonInput(button3));
		panelButtonFeild03.add(ActionButtonInput(button_sub));

		JPanel panelButtonFeild04 = new JPanel();
		panelButtonFeild04.add(ActionButtonInput(button0));
		panelButtonFeild04.add(ActionButtonInput(button_dot));
		panelButtonFeild04.add(ActionButtonInput(button_add));
		// equal
		panelButtonFeild04.add(ActionButtonEqu(button_equ));
		
		JPanel panelButtonFeild05 = new JPanel();
		panelButtonFeild05.add(DelButton(button_del));
		// merger
		Box vbox = Box.createVerticalBox();
		vbox.add(textField);
		vbox.add(textFieldResult);
		vbox.add(panelButtonFeild01);
		vbox.add(panelButtonFeild02);
		vbox.add(panelButtonFeild03);
		vbox.add(panelButtonFeild04);
		vbox.add(panelButtonFeild05);
		frame.setContentPane(vbox);
		frame.pack();
	}

}

效果图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值