JAVA Swing简易初学计算器程序

废话不说,直接上界面原图

接下来就是源码,大家直接复制粘贴就可以运行的了。

package calculator;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

/**
 * 实现一个简易的计算器
 * 二数四则运算
 * @author 不忘初心
 *
 */
public class Calculator extends JFrame implements ActionListener {
	
	// 定义界面上的按钮控件
	final String JButtonName[] = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "×", ".", "0", "=", "÷" };
	// 定义字体内容
	Font font = new Font("宋体", Font.PLAIN, 17);
	// 定义面板,有二个面板 ,第一个就是 输入框和ce ,第二个就是下面的操作的按钮
	JPanel p1, p2;
	// 创建按钮数组
	JButton Jb[] = new JButton[JButtonName.length];
	// 创建CE
	JButton ce;
	// 创建输入框
	JTextField tf;
	// 创建构造方法,使用继承了JFrame后,界面的初始化是需要在无参构造方法中实现
	public Calculator() {
		// 为每一个按钮进行点击事件
		for (int i = 0; i < JButtonName.length; i++) {
			// 实例化并声明按钮名称
			Jb[i] = new JButton("" + JButtonName[i]);
			// 设置字体
			Jb[i].setFont(font);
			// 设置按钮透明
			Jb[i].setContentAreaFilled(false);
			Jb[i].addActionListener(this);
		}
		// 设置成4X4的布 局 网格布局
		p1 = new JPanel(new GridLayout(4, 4));
		// 把按钮添加到网格布局中
		for (int i = 0; i < JButtonName.length; i++) {
			p1.add(Jb[i]);
		}
		// 设置第2个面板
		p2 = new JPanel(new BorderLayout());
		// 为ce按钮赋值
		ce = new JButton("CE");
		ce.setContentAreaFilled(false);
		// 为CE按钮设置监听器
		ce.addActionListener(this);
		// 输入框
		tf = new JTextField("0");
		tf.setFont(font);
		p2.add(ce, "East");
		p2.add(tf, "Center");

		this.add(p2, BorderLayout.NORTH);
		this.add(p1, BorderLayout.CENTER);
		this.setVisible(true);
		this.setTitle("简易计算器");
		
		//使窗口居中
		int windowsWedth = 280;
		int windowsHeight = 300;
		int width = Toolkit.getDefaultToolkit().getScreenSize().width;
		int height = Toolkit.getDefaultToolkit().getScreenSize().height;
		this.setBounds((width - windowsWedth) / 2,
				(height - windowsHeight) / 2, windowsWedth, windowsHeight);

	}

	public void actionPerformed(ActionEvent e) {
		
		// 返回的是按的按钮名
		String label = e.getActionCommand();
		if (e.getSource() == ce)
			Reset();
		else if ("0123456789.".indexOf(label) >= 0)
			RunNumber(label);
		else
			RunOperator(label);

	}
	// 是否是第一次按数字
	boolean isFirstDigit = true;

	public void RunNumber(String key) {
		if (isFirstDigit)
			tf.setText(key);// 如果是第一次按数字,覆盖文本框的内容
		else if ((key.equals(".")) && (tf.getText().indexOf(".") < 0))// 按了点并且文本框中之前没有点
			tf.setText(tf.getText() + ".");//如果按了多个".",只显示一个
		else if (!key.equals("."))
			tf.setText(tf.getText() + key);// 叠加显示在文本框中
		isFirstDigit = false;
	}

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

	public void Reset() {// 重置
		tf.setText("0");
		isFirstDigit = true;
		operator = "=";
	}

	public void RunOperator(String key) {
		if (operator.equals("+"))
			// 将文本框中的字符串强制转化为Double类型
			number += Double.valueOf(tf.getText());
		else if (operator.equals("-"))
			number -= Double.valueOf(tf.getText());
		else if (operator.equals("×"))
			number *= Double.valueOf(tf.getText());
		else if (operator.equals("÷")) {
			number /= Double.valueOf(tf.getText());
		} else if (operator.equals("="))
			number = Double.valueOf(tf.getText());
		tf.setText(String.valueOf(number));
		operator = key;
		isFirstDigit = true;
	}

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

如果大家还有什么不懂,可以私聊问我。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章