【java】简单的计算器

package test922;

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

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

import com.sun.glass.events.WindowEvent;

public class MyCalculator extends JFrame implements ActionListener {
	/**
	 * Serial Version UID
	 * 
	 * @param args
	 */
	private static final long serialVersionUID = -169068472193786457L;

	/**
	 * This class help close the window
	 */
	private class WindowCloser extends WindowAdapter {
		public void windowClosing(WindowEvent we) {
			System.exit(0);
		}
	}

	int i;
	// String final Digit & Operator buttons
	private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", ".", "0", "=", "+" };
	// Build buttons
	JButton[] buttons = new JButton[str.length];
	// for cancel or reset
	JButton reset = new JButton("CE");
	// Build the text field to show the result
	JTextField display = new JTextField("0");

	/**
	 * Constructor wuthout parameters
	 * 
	 * @param args
	 */
	public MyCalculator() {
		super("Calculator");
		// add a panel
		JPanel panel1 = new JPanel(new GridLayout(4, 4));
		// panel1.setLayout(new GridLayout(4,4))
		for (int i = 0; i < str.length; i++) {
			buttons[i] = new JButton(str[i]);
			panel1.add(buttons[i]);
		}
		JPanel panel2 = new JPanel(new BorderLayout());
		// panel2.setLayout(new BorderLayout());
		panel2.add("Center", display);
		panel2.add("East", reset);
		// JPanel panel3 = new Panel();
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add("North", panel2);
		getContentPane().add("Center", panel1);
		// Add action listener for each digit & operator button
		for (int i = 0; i < str.length; i++) {
			buttons[i].addActionListener(this);
		}
		// Add listener for "reset" button.
		reset.addActionListener(this);
		// Add listener for "display" button.
		display.addActionListener(this);
		// The "close" button "X".
		addWindowListener(new WindowCloser());
		// Initialize the window size.
		setSize(800, 800);
		// Show the window.
		// show(); Using show() while JDK version is below 1.5.
		setVisible(true);
		// Fit the certain size.
		pack();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Object target = e.getSource();
		String label = e.getActionCommand();
		if (target == reset) {
			handleReset();
		} else if ("0123456789.".indexOf(label) > 0) {
			handleNumber(label);
		} else {
			handleOperator(label);
		}
	}

	// is the first digit pressed?
	boolean isFirstDigit = true;

	/**
	 * Handling the operation
	 * 
	 * @param key
	 *            pressed operator`s key
	 */
	private void handleOperator(String key) {
		if (operator.equals("+")) {
			number += Double.valueOf(display.getText());

		} else if (operator.equals("-")) {
			number -= Double.valueOf(display.getText());
		} else if (operator.equals("*")) {
			number *= Double.valueOf(display.getText());
		} else if (operator.equals("/")) {
			number /= Double.valueOf(display.getText());
		} else if (operator.equals("=")) {
			number = Double.valueOf(display.getText());
		}
		display.setText(String.valueOf(number));
		operator = key;
		isFirstDigit = true;
	}

	/**
	 * Number handling
	 * 
	 * @param key
	 *            the key of the buttun
	 */
	private void handleNumber(String key) {
		if (isFirstDigit) {
			display.setText(key);
		} else if ((key.equals(".")) && (display.getText().indexOf(".") < 0)) {
			display.setText(display.getText());
		} else if (!key.equals(".")) {
			display.setText(display.getText() + key);
			isFirstDigit = false;
		}

	}

	/**
	 * reset the calculator
	 */
	private void handleReset() {
		display.setText("0");
		isFirstDigit = true;
		operator = "=";
	}

	double number = 0.0;
	String operator = "=";

	public static void main(String[] args) {
		new MyCalculator();
	}
}

结果:

未完成。。。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值