java计算器

package 计算器;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Cal {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new CalFrame();

	}

}
class CalFrame extends JFrame{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	JPanel jp2;
	JLabel jLabel;
	String d1String=null,d2String=null,opString=null,memString=null;
	private final String addString="+";
	private final String minusString="-";
	private final String mutiString="x";
	private final String diverString="/";
	public CalFrame() {
		ActionListener a1,a2;
		
		a1=(ActionListener) new CalAction1();
		a2=(ActionListener) new CalAction2();
		setLayout(new BorderLayout());
		//jp1=new JPanel();
		jLabel=new JLabel("0",JLabel.RIGHT);//字符靠右,不好用panel
		jLabel.setBorder(new EmptyBorder(5, 5, 5, 5)); // 设置边距,最后的5是右边距
		//add(jLabel);
		jp2=new JPanel();
		jp2.setLayout(new GridLayout(5,4));
		jp2.add(addButton("7", a1));
		jp2.add(addButton("8", a1));
		jp2.add(addButton("9", a1));
		jp2.add(addButton(addString, a2));
		jp2.add(addButton("4", a1));
		jp2.add(addButton("5", a1));
		jp2.add(addButton("6", a1));
		jp2.add(addButton(minusString, a2));
		jp2.add(addButton("1", a1));
		jp2.add(addButton("2", a1));
		jp2.add(addButton("3", a1));
		jp2.add(addButton(mutiString, a2));
		jp2.add(addButton("0", a1));
		jp2.add(addButton(".", a1));
		jp2.add(addButton("计算", a2));
		jp2.add(addButton(diverString, a2));
		jp2.add(addButton("清除", a2));
		jp2.add(addButton("退格", a2));
		jp2.add(addButton("记忆", a2));
		jp2.add(addButton("取出", a2));
		add(BorderLayout.NORTH,jLabel);
		add(BorderLayout.CENTER,jp2);
		int width=320;
		int height=226;
		setSize(width,height);
		Toolkit tk =Toolkit.getDefaultToolkit();
		Dimension dm=tk.getScreenSize();
		setLocation((dm.width-width)/2,(dm.height-height)/2);
		setTitle("计算器");
		setVisible(true);
		setResizable(false);//禁止改变大小
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}
	
	private JButton addButton(String title,ActionListener a1) {
		JButton jButton=new JButton(title);
		jButton.setSize(20,50);
		jButton.addActionListener(a1);
		return jButton;
	}
	
	
	


class CalAction1 implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String numString=((JButton)e.getSource()).getText();
		if(opString==null) {
			if(d1String==null) {
					d1String=numString;	
			}
			else {
				if(numString==".") {
					if(d1String.indexOf('.')==-1)
						d1String=d1String+numString;		
				}
				else
				{
					if(d1String=="0")
						d1String=numString;
					else
						d1String=d1String+numString;
				}
			}
			if(d1String!=null)
			{
				jLabel.setText(d1String);
			}
			else {
				jLabel.setText("0");	
			}
		}
		else {
			if(d2String==null) {
					d2String=numString;	
			}
			else {
				if(numString==".") {
					if(d2String.indexOf('.')==-1)
						d2String=d2String+numString;		
				}
				else
				{
					if(d2String=="0")
						d2String=numString;
					else
						d2String=d2String+numString;
				}
			}
			if(d2String!=null)
				jLabel.setText(d2String);
			else
				jLabel.setText("0");
			
		}
		
	}
	
}

class CalAction2 implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String op2=((JButton)e.getSource()).getText();
		if(op2=="清除") {
			jLabel.setText("0");
			d1String=null;
			d2String=null;
			opString=null;
		}
		else if(op2=="退格") {
			if(d2String!=null) {
				d2String=d2String.substring(0, d2String.length()-1);
				if(d2String.length()>0)
					jLabel.setText(d2String);
				else {
					jLabel.setText(opString);
					d2String=null;
				}
			}
			else if(opString!=null) {
				jLabel.setText(d1String);
				opString=null;
			}
			else if(d1String!=null) {
				d1String=d1String.substring(0, d1String.length()-1);
				if(d1String.length()>0)
					jLabel.setText(d1String);
				else {
					jLabel.setText("0");
					d1String=null;
				}
	
			}
		}
		else if(op2=="记忆") {
			memString=jLabel.getText();
		}
		else if(op2=="取出") {
			if(memString!=null) {
				if(d1String==null || opString==null) {
					d1String=memString;
					jLabel.setText(d1String);			
				}
				else if(d2String==null &&opString!=null) {
					d2String=memString;
					jLabel.setText(d2String);			
					
				}
			}
		}
		else if(op2=="计算") {
			yunsuan();

		}
		else if(d1String!="."){ //加减乘除,操作数只有一个.不是数字
			if(d2String!=null) //第二个操作数有了,没有按运算按钮按了加减乘除按钮
				yunsuan();
		opString=op2;	
		jLabel.setText(opString);
		}
	}
	
	private void yunsuan() {
		// TODO Auto-generated method stub
		if(d1String!=null&&d2String!=null&&opString!=null&&d2String!=".") {
		double d1= Double.parseDouble(d1String);
		double d2= Double.parseDouble(d2String);
		double r=0;
		switch (opString) {
		case addString: {
			r=d1+d2;
			break;
			}
		case minusString: {
			r=d1-d2;
			break;
			}
		case mutiString: {
			r=d1*d2;
			break;
			}
		case diverString: {
			if(d2!=0.0d)
			{
				r=d1/d2;
			}
			else {
				return;
			}
			break;
			}
		default:
		}
		
		int i=(int)r;
		if(i==r) {
			d1String=Integer.toString(i);
		}
		else {
			d1String=Double.toString(r);
		}
		jLabel.setText(d1String);
		d2String=null;
		opString=null;
		}		
	}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值