java实现计算器

package jg_4;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * @author ZhangLong
 * 网格布局
 */
@SuppressWarnings("serial")
public class Calculator extends JFrame {
	//声明一个文本栏控件,用于显示计算结果
	private JTextField txtResult;
	private JPanel p;
	//定义一个字符串数组,将计算器中按钮的文字都放在该数组中
	private String name[] = {"7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", ".", "=", "/"};
	//声明一个按钮数组,该数组的长度以字符串的长度为准
	private JButton button[] = new JButton[name.length];
	//定义一个存放计算结果的变量,初始为0
	private double result = 0;
	//存放最后一个操作符
	private String lastCommand = "=";
	//标识是否开始
	private boolean start = true;
	
	
	public Calculator() { //构造方法
		super("计算器");
		txtResult = new JTextField(20); //实例化文本栏控件
		txtResult.setFocusable(false); //------设置文本框不是焦点状态------------------------------------------------------
		this.add(txtResult, BorderLayout.NORTH); //将文本栏控件放置在窗体框架的上方
		p = new JPanel(new GridLayout(4,4)); //实例化面板对象,同时设置此面板布局为4行4列的网格布局

		//创建监听对象
		ButtonListener bl = new ButtonListener();
		KeyListener kl = new KeyListener();
		
		for (int i=0; i<button.length; i++) { //循环实例化按钮对象数组
			button[i] = new JButton(name[i]);
			p.add(button[i]);
			//注册监听到每一个按钮
			button[i].addActionListener(bl);
			button[i].addKeyListener(kl);
		}
		this.add(p, BorderLayout.CENTER);
		this.setSize(200, 150);
		this.setLocation(500, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	/*
	 * 计算
	 */
	public void calculate(double x) {
		if (lastCommand.equals("+"))
			result += x;
		else if (lastCommand.equals("-"))
			result -= x;
		else if (lastCommand.equals("/"))
			result /= x;
		else if (lastCommand.equals("*"))
			result *= x;
		else if (lastCommand.equals("="))
			result = x;
		//将结果显示到文本框中
		txtResult.setText("" + result);
	}
	
	/*
	 * 主方法主方法
	 */
	public static void main(String[] args) {
		new Calculator();
	}
	
	/*
	 * 按钮监听类
	 */
	private class ButtonListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			String input = e.getActionCommand(); //返回点击的按钮
			System.out.println(input);
			//单击操作符号按钮
			if (input.equals("+") || input.equals("-") || input.equals("*") || input.equals("/") || input.equals("=")) {
				if (start) { //start 代表应该输入一个数(包括负号-)
					if (input.equals("-")) {
						txtResult.setText(input);
						start = false;
					} else
						lastCommand = input;
				} else {
					calculate(Double.parseDouble(txtResult.getText()));
					lastCommand = input;
					start = true;
				}
			} else {
				if (start) {
					txtResult.setText("");
					start = false;
				}
				txtResult.setText(txtResult.getText() + input);
			}
		}
	}
	
	/*
	 * 键盘按键监听类
	 */
	private class KeyListener extends KeyAdapter {
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值