简单的计算器

本文介绍了一个使用Java Swing实现的简易计算器程序。该程序包括基本的加减乘除运算功能,并详细展示了界面布局和按钮事件处理的实现过程。

编写如下图的一个计算器图形界面,并可进行简单的加减乘除运算。

package 计算器;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Calculator {

	JFrame jframe;
	JPanel jp1, jp2,jp3;
	JTextField jtf;
	JButton jbtn0, jbtn1, jbtn2, jbtn3, jbtn4, jbtn5, jbtn6, jbtn7, jbtn8,
			jbtn9, jbtn10, jbtn11, jbtn12, jbtn13, jbtn14, jbtn15, jbtn16,jbtn17;
	
	double output1=0 , output2=0;
	boolean outflag1=false , outflag2=false , opflag=false;
	private int op=0 , add=1 , sub=2 , mul=3 , div=4;
	boolean firstpress = false;
	/*outflag1,outflag2表示output1,output2是否有操作数。opflag表示op是否有运算符。*/

	
	/**
	 * 创建计算器的整体界面
	 */
	public void go() {

		jframe = new JFrame("Calculator");
		jp1 = new JPanel();
		jp2 = new JPanel();
		jp3 = new JPanel();
		jtf = new JTextField(18);
        
		jbtn17 = new JButton(" 清 除 ",new ImageIcon("2.png"));
		jbtn0 = new JButton("0");
		jbtn1 = new JButton("1");
		jbtn2 = new JButton("2");
		jbtn3 = new JButton("3");
		jbtn4 = new JButton("4");
		jbtn5 = new JButton("5");
		jbtn6 = new JButton("6");
		jbtn7 = new JButton("7");
		jbtn8 = new JButton("8");
		jbtn9 = new JButton("9");
		jbtn10 = new JButton("10");
		jbtn11 = new JButton("+");
		jbtn12 = new JButton("-");
		jbtn13 = new JButton("*");
		jbtn14 = new JButton("/");
		jbtn15 = new JButton("=");
		jbtn16 = new JButton(".");
		
		jtf.setText(jtf.getText()+"0");
		jtf.setEditable(false);
		jtf.setBackground(Color.WHITE);
		jp1.add(jtf);
		jp1.setSize(250, 50);
		jp2.add(jbtn17);
		jp3.setLayout(new GridLayout(4,4));
		jp3.add(jbtn7);jp3.add(jbtn8);jp3.add(jbtn9);jp3.add(jbtn11);
		jp3.add(jbtn4);jp3.add(jbtn5);jp3.add(jbtn6);jp3.add(jbtn12);
		jp3.add(jbtn1);jp3.add(jbtn2);jp3.add(jbtn3);jp3.add(jbtn13);
		jp3.add(jbtn0);jp3.add(jbtn16);jp3.add(jbtn15);jp3.add(jbtn14);
		
		jframe.add(jp1,BorderLayout.NORTH);
		jframe.add(jp3,BorderLayout.SOUTH);
		jframe.add(jp2,BorderLayout.CENTER);
		jframe.setSize(250, 220);
		jframe.setLocation(550, 180);
		jframe.setResizable(false);
		jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jframe.setVisible(true);
		
	}
	
	
	/**
	 * 为计算器上面的按钮注册事件
	 */
	public void event(){
		/*
		 * jbtn10是判断文本中不是一位0时,可以数的后面输0
		  */
		jbtn10.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				if(!(jtf.getText().length()==1 && jtf.getText().contains("0")))
					jtf.setText(jtf.getText()+"0");
				
				if(opflag==true && firstpress==false){
					jtf.setText("0");
					firstpress=true;
					
				}				
			}
		});
		
		jbtn17.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent a) {
				// TODO 自动生成的方法存根
				jtf.setText("0");
				
			}
		});
		
		jbtn0.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				addnum("0");	
				
			}
		});
		
		jbtn1.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				addnum("1");	
				
			}
		});
		
		jbtn2.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				addnum("2");
				
			}
		});
		
		jbtn3.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				addnum("3");
				
			}
		});
		
		jbtn4.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				addnum("4");
				
			}
		});
		
		jbtn5.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				addnum("5");
				
			}
		});
		
		jbtn6.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				addnum("6");
				
			}
		});
		
		jbtn7.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				addnum("7");
				
			}
		});
		
		jbtn8.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				addnum("8");
				
			}
		});
		
		jbtn9.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				addnum("9");
				
			}
		});
		
		jbtn16.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				if(!jtf.getText().contains("."))
					jtf.setText(jtf.getText()+".");
				
			}
		});
		
		jbtn15.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				opbutton(0);
				outflag1=false;
				outflag2=false;
				
			}
		});
		
		jbtn11.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				opbutton(1);
				
			}
		});
		
		jbtn12.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				opbutton(2);
				
			}
		});
		
		jbtn13.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				opbutton(3);
				
			}
		});
		
		jbtn14.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				opbutton(4);
				
			}
		});
		
	}

	protected void opbutton(int i) {
		// TODO 自动生成的方法存根
		if(outflag1==false){
			output1 = Double.parseDouble(jtf.getText());
			outflag1 = true;		
		}
		if(opflag==false){
			op = i;
			opflag = true;
			firstpress = false;
		}else{
			output2 = Double.parseDouble(jtf.getText());
			operate();
			outflag1 = true;
			op = i;
			opflag = true;
			outflag2 =  false;
			firstpress = false;
		}
		
	}


	/**
	 * 为计算器上面每个按钮的事件添加方法
	 * @param x
	 */
	protected void addnum(String x) {
		// TODO 自动生成的方法存根
		if(jtf.getText().length()==1 && jtf.getText().contains("0"))
			jtf.setText(x);
		else
			jtf.setText(jtf.getText()+x);
		if(opflag==true && firstpress==false){
			jtf.setText(x);
			firstpress = true;			
		}
				
	}
	
	
	/**
	 *添加操作事件,0代表等于,1代表加,2代表减, 3代表乘,4代表除
	 *其中的运算结果为double型,要强制转换成字符型才能赋值给文本框
	 */
	private void operate(){
		switch(op){
			case 0:
				output1 = output2 + 0;
				break;
			case 1:
				output1 = output1 + output2;
				jtf.setText(String.valueOf(output1));
				break;
			case 2:
				output1 = output1 - output2;
				jtf.setText(String.valueOf(output1));
				break;
			case 3:
				output1 = output1 * output2;
				jtf.setText(String.valueOf(output1));
				break;
			case 4:
				if(output2!=0){
					output1 = output1 / output2;
					jtf.setText(String.valueOf(output1));
				}else{
					output1 = 0;
					jtf.setText(String.valueOf(output1));					
				}
				break;			
		}
	}
	
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Calculator cal = new Calculator();
		cal.go();
		cal.event();

	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值