⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator3.java

📁 这个压缩文件里包含三个简易计算器代码
💻 JAVA
字号:
package com.Calculator3;

import java.awt.BorderLayout;
/*BorderLayout布局是是Dialog类和Frame类的默认布局管理器,
容器被划分为五个管理区域,东南西北中。*/
import java.awt.GridLayout;
/*GridLayout布局是一种网格式的布局管理器*/
import java.awt.event.ActionEvent;//ActionEvent为事件类
import java.awt.event.ActionListener;//ActionListener为一般事件接口
import javax.swing.*;//这一句话相与下面四句话等效
/*import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;*/
//感觉javax.swing的按钮比较漂亮
import java.math.BigDecimal;//引入数学类,类似于C++中的#include<math.h>

public class Calculator3 implements ActionListener {
	/*要实现接口,可在一个类的声明中用关键字implements表示该泪已经实现的接口*/
	private JTextField jtf = new JTextField("", 30);//用来显示数值的文本框
	private Boolean append = false;
	private String operator = "+";//记录选择的计算形式:+、-、*、/

	private BigDecimal d1 = BigDecimal.valueOf(0);
	// private BigDecimal d1 = new BigDecimal(0.0);
	
	public Calculator3() {//构造函数
		JFrame jf = new JFrame("计算器");//定义框架“计算器”
		JPanel jp = new JPanel();//定义面板
		/*框架和面板都是容器,可以放置各控件,框架比面板更能“装”*/

		jf.setLayout(new BorderLayout());
		jp.setLayout(new GridLayout(5, 4));//GridLayou(5,4)即五行四列
		
		String[] lable = { "backspace", "CE", "C", "+", "7", "8", "9", "-",
				"4", "5", "6", "×", "1", "2", "3", "/", "0", "+/-", ".", "=" };
		//定义字符串数组,并将各字符串初始化,注意:这里的label并不是类,只是字符串数值名,起到“标签”作用
		JButton[] jb = new JButton[lable.length];
		//定义和标签同样多的按钮

		for (int i = 0; i < lable.length; i++) {
			jb[i] = new JButton(lable[i]);//将标签“贴”在按钮上
			jp.add(jb[i]);//将按钮加入到面板中
			jb[i].addActionListener(this);//为按钮添加事件监听器
		}//for循环的使用常常可以简化问题

		jf.add(jtf, BorderLayout.NORTH);//将显示数值的文本框放在框架的在上面
		jf.add(jp);//将面板添加到框架中
		jf.setVisible(true);//必须调用setVisible()使框架的实例可见
		jf.pack();// 自动调整大小,还可以调用setSize()方法设置框架大小,否则框架同样不可见。
		jf.setLocation(400, 300);// 设置窗口出现时左上点的坐标
		jf.validate();// 重新加载组件属性,重新显示
		jf.setResizable(false);//框架的大小不可改变
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置框架默认的关闭操作
	}
	//完成Calculator3类的定义

	public static void main(String[] args) {
		new Calculator3();//写成Calculator3 calcutor3 = new Calculator3();更规范
	}//在主函数中生成一个类的实例,没有定义对象名

	public void actionPerformed(ActionEvent e) {//实现ActionListener接口中的方法
		String com = e.getActionCommand();//点击按钮后,将按钮上的命令名(为字符串)赋给com
		if (com.equals("0") || com.equals("1") || com.equals("2")
				|| com.equals("3") || com.equals("4") || com.equals("5")
				|| com.equals("6") || com.equals("7") || com.equals("8")
				|| com.equals("9")) {
			//如果点击的是数字,那么进行一下分支
			if (append) {//append的初值设为false
				jtf.setText(jtf.getText() + com);//追加字符串,注意区别setText()和getText()
			} else {
				jtf.setText(com);
				append = true;
			}

		} else if (com.equals(".")) {//如果点击的是小数点,那么进行以下分支
			String temp = jtf.getText();//temp保存当前文本框内容,以备后面计算之用
			if (temp.indexOf(".") == -1) {
				jtf.setText(jtf.getText() + com);
				append = true;//刚开始就有小数点也是允许追加的
			}
		} else if (com.equals("+") || com.equals("-") || com.equals("*")
				|| com.equals("/")) {
			String temp = jtf.getText();
			d1 = BigDecimal.valueOf(Double.parseDouble(temp));//
			operator = com;
			append = false;//再输入就是替换了而不是追加了

		} else if (com.equals("=")) {
			String temp = jtf.getText();
			BigDecimal d2 = BigDecimal.valueOf(Double.parseDouble(temp));
			if (operator.equals("+")) {

				jtf.setText(d1.add(d2).doubleValue() + "");
				append = false;
			}
			if (operator.equals("-")) {
				jtf.setText(d1.subtract(d2).doubleValue() + "");
				append = false;
			}
			if (operator.equals("×")) {
				jtf.setText(d1.multiply(d2).doubleValue() + "");
				append = false;
			}
			if (operator.equals("/")) {
				jtf.setText(d1.divide(d2).doubleValue() + "");
				append = false;
			}

			// jtf.setText(d1 + "");
			// append = false;

		} else if (com.equals("+/-")) {
			String temp = jtf.getText();
			double d2 = Double.parseDouble(temp);
			d2 = d2 * (-1);
			jtf.setText(d2 + "");

		} else if (com.equals("backspace")) {

			jtf.setText(jtf.getText().substring(0, jtf.getText().length() - 1));

		} else if (com.equals("CE") || com.equals("C")) {
			jtf.setText("");
		}

	}

}
/*getActionCommand
public String getActionCommand()返回与此动作相关的命令字符串。
这使得 "modal" 组件可以由其当前的状态,通过此字符串来得到它能够产生的几个命令之一。
例如,单个按钮可以在“显示详细信息”和“隐藏详细信息”之间切换。在所有情况下,
源对象和事件都将是相同的,但命令字符串将会标识出实际对应的动作。 
注意,如果将 null 命令字符串传递给此 ActionEvent 的构造方法,则此方法返回 null。 

返回:
标识此事件命令的字符串
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -