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

📄 cal.java

📁 使用了java 的awt包实现的java带有界面的计算器功能
💻 JAVA
字号:
package cal;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.*;

public class Cal {
    //新建计算器的框架和面版
	private Frame f;
	private Panel pNorth, pCenter, pSouth, pWest, pEast;
//定义计算器的按钮名称
	private String nameCenter[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
	private String nameWest[] = { "+", "-", "*", "/" };
	private String nameEast[] = { "CE", "C", ".", "=" };
	private String nameSouth[] = { "0" };
	private Button btnCenter[] = new Button[nameCenter.length];
	private Button btnEast[] = new Button[nameEast.length];
	private Button btnWest[] = new Button[nameWest.length];
	private Button btnSouth[] = new Button[nameSouth.length];
//创建显示部分
	TextField tf = new TextField("0", 20);
	
//创建计算器计算过程中用到的数据结构
	CalBean cb = new CalBean();

	/**
	 * 
	 * 构造器
	 * 
	 */
	public Cal() {
		//新建框架
		f = new Frame("my cal");
		//新建面板
		pNorth = new Panel();
		pCenter = new Panel();
		pSouth = new Panel();
		pWest = new Panel();
		pEast = new Panel();
//框架用BorderLayout
		// 布局BorderLayout中的North
		pNorth.setSize(500, 30);
		pNorth.add(tf);
		// pNorth.setBackground(Color.red);
		pNorth.setLayout(new FlowLayout(FlowLayout.CENTER));

		// 布局BorderLayout中的South
		pSouth.setSize(500, 30);
		pSouth.setLayout(new GridLayout(1, 1, 4, 4));
		for (int i = 0; i < nameSouth.length; i++) {
			btnSouth[i] = new Button(nameSouth[i]);
			pSouth.add(btnSouth[i]);
			btnSouth[i].addActionListener(new ZeroListener());
		}
		pSouth.setVisible(true);

		// 布局BorderLayout中的East
		pEast.setSize(200, 250);
		pEast.setLayout(new GridLayout(4, 1, 4, 4));
		for (int i = 0; i < nameEast.length; i++) {
			btnEast[i] = new Button(nameEast[i]);
			pEast.add(btnEast[i]);
			btnEast[i].addActionListener(new EastListener());
			btnEast[i].setSize(150, 30);
		}
		pEast.setVisible(true);

		// 布局BorderLayout中的West
		pWest.setSize(200, 250);
		pWest.setLayout(new GridLayout(4, 1, 2, 2));
		for (int i = 0; i < nameWest.length; i++) {
			btnWest[i] = new Button(nameWest[i]);
			pWest.add(btnWest[i]);
			btnWest[i].addActionListener(new OperaListener());
			btnWest[i].setSize(150, 30);
		}
		pWest.setVisible(true);

		// 布局BorderLayout中的Center
		pCenter.setSize(100, 100);
		pCenter.setLayout(new GridLayout(3, 3, 2, 2));
		for (int i = 0; i < nameCenter.length; i++) {
			btnCenter[i] = new Button(nameCenter[i]);
			pCenter.add(btnCenter[i]);
			btnCenter[i].addActionListener(new NumberListener());
		}
		pCenter.setVisible(true);

		// 把各部分面板加到框架
		f.setLayout(new BorderLayout(5, 5));
		f.add(pNorth, BorderLayout.NORTH);
		f.add(pCenter, BorderLayout.CENTER);
		f.add(pEast, BorderLayout.EAST);
		f.add(pWest, BorderLayout.WEST);
		f.add(pSouth, BorderLayout.SOUTH);
		f.setSize(500, 300);
		f.pack();
		f.setVisible(true);
		//添加关闭按钮
		f.addWindowListener(new CloseWindow());

	}
    /**
     * 创建计算器
     * 
     * 
     * @param args
     */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Cal c = new Cal();
	}

	/**
	 * 
	 * 关于计算器框架的监听器
	 * @author Administrator
	 *
	 */
	class CloseWindow implements WindowListener {

		public void windowActivated(WindowEvent e) {
			// TODO Auto-generated method stub

		}

		public void windowClosed(WindowEvent e) {
			// TODO Auto-generated method stub

		}

		public void windowClosing(WindowEvent e) {
			// TODO Auto-generated method stub
			System.exit(0);
		}

		public void windowDeactivated(WindowEvent e) {
			// TODO Auto-generated method stub

		}

		public void windowDeiconified(WindowEvent e) {
			// TODO Auto-generated method stub

		}

		public void windowIconified(WindowEvent e) {
			// TODO Auto-generated method stub

		}

		public void windowOpened(WindowEvent e) {
			// TODO Auto-generated method stub

		}

	}

	/***
	 * 
	 * 数字键的监听器
	 * @author Administrator
	 *
	 */
	class NumberListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			//获得命令
			String commond = e.getActionCommand();
			//如果刚计算完
			if (cb.isClafin()&&(cb.isCla()==false)) {
				tf.setText(null);
				cb.setClafin(false);
				cb.setOper(0);
				cb.setTemp1("000");
				cb.setTemp2("000");
				cb.setCla(false);
				cb.setHaspoint(false);
				cb.setPoint(false);
			}
			//初始化后
			if ((cb.isCla())&&(cb.isClafin()==false)) {
				//如果之前输入的是运算符号
				tf.setText(null);
			}
			//连加的情况
			if (cb.isCla()&&cb.isClafin()) {
				//连加
				tf.setText(null);
				cb.setClafin(false);
			}
			String s=tf.getText();
			if (s.equals("0")) {
				tf.setText(null);
			}
			//添加显示结果
			setTFText(tf, commond);
			cb.setCla(false);
			cb.setPoint(false);
		}
	}

	/**
	 * 
	 * 获得显示器的内容
	 * @param t
	 * @return
	 */
	private String getTFText(TextField t) {
		return t.getText();
	}

	/**
	 * 
	 * 设置TextField
	 * @param t
	 * @param a
	 */
	private void setTFText(TextField t, String a) {
		String c = t.getText();
		if (c.equals("0")) {
			c = a;
		} else {
			c = c + a;
		}
		t.setText(c);
	}

	/**
	 * 浮点数变成字符串
	 * @param d
	 * @return
	 */			
	private String changeFloat(Float d) {
		return Float.toString(d);
	}
/**
 * 计算
 * @param a
 * @param b
 * @return
 */	
	private String caluaterWithOperate(String a,String b){
		float aa=Float.parseFloat(a);
		float bb=Float.parseFloat(b);
		float cc=0.0f;
		
		if (a.equals("0")==false) {
			switch (cb.getOper()) {
			case 1:cc = aa + bb;break;
			case 2:cc = aa - bb;break;
			case 3:cc = aa * bb;break;
			case 4:cc = aa / bb;break;
			default:break;
			}
		}
		
		return Float.toString(cc);
	}
	/**
	 * 
	 * 响应C CE .和=按钮的监听器
	 * @author Administrator
	 *
	 */
	class EastListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			String commond = e.getActionCommand();
			//------------------ C ------------------
			if (commond.equals("C")) {
				cb.setTemp1("000");
				cb.setTemp2("000");
				tf.setText("0");
				cb.setCla(false);
				cb.setClafin(false);
				cb.setHaspoint(false);
				cb.setOper(0);
				cb.setPoint(false);
			}
			//-------------------- CE -----------------------
			if (commond.equals("CE")) {
				tf.setText("0");
			}
			//----------------------- . ------------------------
			if (commond.equals(".")) {
				 if (cb.isCla()==true) {//z之前操作是运算符号
					 //oper
					tf.setText("0.");
					cb.setPoint(true);
					cb.setHaspoint(true);
					cb.setCla(false);
				}else
				 if (cb.isClafin()==true) {//刚计算完
					 //=
					tf.setText("0.");
					cb.setHaspoint(true);
					cb.setPoint(true);
					cb.setClafin(false);
					
					cb.setTemp1("000");
					cb.setTemp2("000");
					cb.setCla(false);
					cb.setOper(0);

				}else if (cb.isHaspoint()==false) {//已经有小数点
					//all
					if (tf.getText().equals("0")) {//屏幕初始化
						tf.setText("0.");
					}else{//加小数点
						tf.setText((tf.getText()+"."));
					}
					cb.setHaspoint(true);
					cb.setPoint(true);
				}
			}
			//---------------------- = -------------------------
			if (commond.equals("=")) {
				if ((cb.getTemp1().equals("000")==false)&&(cb.isClafin()==false)){
					//第一次按等号
					cb.setTemp2(tf.getText());
					String res=caluaterWithOperate(cb.getTemp1(),tf.getText());
					cb.setTemp1(res);
					tf.setText(res);
					cb.setClafin(true);
					cb.setHaspoint(false);
					cb.setPoint(false);
					cb.setCla(false);
				}else if((cb.getTemp1().equals("000")==false)&&(cb.isClafin()==true)&&(cb.isCla()==false)){
					//狂按等号
					String res=caluaterWithOperate(cb.getTemp1(),cb.getTemp2());
					cb.setTemp1(res);
					tf.setText(res);
					cb.setClafin(true);
					cb.setHaspoint(false);
					cb.setPoint(false);
					cb.setCla(false);
				}else if(cb.isClafin()&&cb.isCla()){
					//按操作顺序 1 + 2 + = 的情况
				}
				
			}
		}
		
	}
	
	/***
	 * 
	 * 响应+ - * /按钮的监听器
	 * @author Administrator
	 *
	 */
	class OperaListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			//获得命令
			String commond = e.getActionCommand();
			
			if (cb.isClafin()==false) {//不是刚运算完
				if ((cb.getTemp1().equals("000") == false)
						&& (cb.getTemp2().equals("000"))) {//temp1有东西
					String s = tf.getText();
					cb.setTemp2(s);//把数加到temp2
					String res = caluaterWithOperate(cb.getTemp1(), cb
							.getTemp2());
					tf.setText(res);
					cb.setTemp1(res);
					cb.setClafin(true);
					cb.setCla(true);
					cb.setPoint(false);
					cb.setHaspoint(false);
					setOpetator(commond);
				} else if ((cb.getTemp1().equals("000") == false)
						&& (cb.getTemp2().equals("000") == false)) {
					//有两个数
					String res = caluaterWithOperate(cb.getTemp1(), tf
							.getText());
					tf.setText(res);
					cb.setTemp1(res);
					cb.setClafin(true);
					cb.setCla(true);
					cb.setPoint(false);
					cb.setHaspoint(false);
					setOpetator(commond);
				} else if ((cb.getTemp1().equals("000"))
						&& (cb.getTemp2().equals("000"))) {
					//什么数也没有
					String s = tf.getText();
					cb.setTemp1(s);
					setOpetator(commond);
					cb.setCla(true);
					cb.setClafin(false);
					cb.setPoint(false);
					cb.setHaspoint(false);
				}
			}else{
				setOpetator(commond);
				cb.setCla(true);
			}
		}
		/**
		 * 操作符号转数字
		 * @param s
		 */
		private void setOpetator(String s){
			if (s.equals("+")) {
				cb.setOper(1);
			}	
			if (s.equals("-")) {
				cb.setOper(2);
			}	
			if (s.equals("*")) {
				cb.setOper(3);
			}	
			if (s.equals("/")) {
				cb.setOper(4);
			}	
		}
	}
	
	/***
	 * 
	 * 0
	 * @author Administrator
	 *
	 */
	class ZeroListener implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			if (tf.getText().equals("0")) {
				//屏幕是0什么也不作
			}else if(cb.isClafin()){//刚运算完,屏幕是结果
				cb.setClafin(false);
				tf.setText("0");
			}else if(cb.isCla()){//刚按完操作符号
				cb.setCla(false);
				tf.setText("0");
			}else{//其他情况
			tf.setText((tf.getText()+"0"));	
			cb.setPoint(false);
			}
		}
		
	}
}

⌨️ 快捷键说明

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