用Java实现简单的计算器

package Caluculator;

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

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


public class JCaluculator extends JFrame implements ActionListener{

	private final String[] str = {
			"7","8","9","/",
			"4","5","6","*",
			"1","2","3","-",
			".","0","=","+"
	};
	
	JButton[] buttons = new JButton[str.length];
	JButton reset = new JButton("CE"); //括号内代表标签
	JTextField display = new JTextField("0");
	
	public JCaluculator()
	{
		super("Caluculator");
		Font font = new Font("Consolas",Font.BOLD,18); //字体
		
		//头部面板
		JPanel pHead = new JPanel(new BorderLayout());
		pHead.add(display,BorderLayout.CENTER);
		pHead.add(reset,BorderLayout.EAST);
		display.setFont(font);
		reset.setFont(font);
		
		
		//按键面板
		JPanel pBody = new JPanel(new GridLayout(4,4));
		for(int i = 0; i < str.length; i++)
		{
			buttons[i] = new JButton(str[i]);
			buttons[i].setFont(font);
			pBody.add(buttons[i]);
		}
		
		//综合布局
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add("North",pHead);
		getContentPane().add("Center",pBody);
		
		
		
		//添加监控
		for(int i = 0; i < str.length; i++)
		{
			buttons[i].addActionListener(this);
		}
		reset.addActionListener(this);
		display.addActionListener(this);
		
		//设置面板属性
		setSize(400,300);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
	}
	
	
	public void actionPerformed(ActionEvent e)
	{
		Object target = e.getSource();//得到事件发出的对象
		String cmd = e.getActionCommand();//获取标签
		if(target == reset ) 
		{
			handleReset();
		}
		else if("0123456789.".indexOf(cmd) >= 0)
		{
			handleNumber(cmd);
		}
		else 
		{
			handleOperator(cmd);
		}
	}
	
	boolean isFirstDigit = true;
	double number = 0.0;
	String operator = "=";
	
	public void handleNumber(String key)
	{
		if(isFirstDigit)
		{
			display.setText(key);
		}
		else if(!key.equals("."))
		{
			display.setText(display.getText() + key);
		}
		else if(display.getText().indexOf(".") < 0)
		{
			display.setText(display.getText() + ".");
		}
		
		isFirstDigit = false;
	}
	
	
	public void handleReset()
	{
		display.setText("0");
		isFirstDigit = true;
		operator = "=";
	}
	
	public void  handleOperator(String cmd)
	{
		double dDisplay = Double.valueOf(display.getText());
		switch(operator) {
		case"+": number += dDisplay; break;
		case"-": number -= dDisplay; break;
		case"*": number *= dDisplay; break;
		case"/": number /= dDisplay; break;
		case"=": number = dDisplay; break;
		
		}
		display.setText(String.valueOf(number));
		operator = cmd;
		isFirstDigit = true;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new JCaluculator().setVisible(true);
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
java 大作业 科学计算器 menu切换普通与科学计算器 部分代码: class MyKey extends KeyAdapter { public void keyPressed(KeyEvent e) { char c = e.getKeyChar(); System.out.print(c); boolean bFlag = false; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if(IfResult){ tf.setText(""); IfResult = false; } tf.setText(tf.getText().trim() + c); bFlag = true; break; case '.': if(tf.getText().trim().indexOf(".") == -1){ tf.setText(tf.getText() + "."); } bFlag = true; break; case '_': if(Double.parseDouble(tf.getText()) > 0){ if(tf.getText().length() > 1){ tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); }else{ tf.setText("0"); IfResult = true; } }else{ if(tf.getText().length() > 2){ tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); }else{ tf.setText("0"); IfResult = true; } } bFlag = true; break; case '+': if(flag){ IfResult = false; } if(IfResult){ oper = "+"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "+"; IfResult = true; } bFlag = true; break; case '-': if(flag){ IfResult = false; } if(IfResult){ oper = "-"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "-"; IfResult = true; } bFlag = true; break; case '*': if(flag){ IfResult = false; } if(IfResult){ oper = "*"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "*"; IfResult = true; } bFlag = true; break; case '/': if(flag){ IfResult = false; } if(IfResult){ oper = "/"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "/"; IfResult = true; } bFlag = true; break; case '=': if(flag){ IfResult = false; } if(IfResult){ oper = "="; }else{ getResult(Double.parseDouble(tf.getText())); oper = "="; IfResult = true; } bFlag = true; break; } if(bFlag && tf.getText().equals("0")){ tf.setText("0"); IfResult = true; flag = true; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鄢广杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值