`

java Swing 的一个简单的计算器

阅读更多

//实现了 =、-、+、*、/等基本的操作

 

package Calculator;

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

public class Calculate extends JFrame {

	public static final int WIDTH = 500 ;
	public static final int HEIGHT = 400 ;
	
	private JTextField result; 
	
	private JPanel mainPane; //主面板 
	private JPanel numPane; //数字面板 
	private JPanel operatePane; //操作符面板 
	private JPanel showPane; //显示面板 
	
	private JButton[] numB; //数字按钮 
	private JButton[] operateB; //操作符面板 
	
	public Calculate(String title){
		
		setTitle(title) ;
		
		result = new JTextField("0.0",22) ;
		result.setEditable(false) ;
		
		mainPane = new JPanel() ;
		numPane = new JPanel() ;
		operatePane = new JPanel() ;
		showPane = new JPanel() ;
		
		numB = new JButton[12] ;
		for(int i=0; i<9; i++) 
		{ 
			numB[i] = new JButton(new Integer(i+1).toString()); 
		} 
		numB[9] = new JButton("0"); 
		numB[10] = new JButton("cls"); 
		numB[11] = new JButton("."); 
		//将数字按钮加到数字面板上
		numPane.setLayout(new GridLayout(4,3,1,1)) ;
		for(int i=0;i<12;i++)
			numPane.add(numB[i]) ;
		
		operateB = new JButton[8] ;
		operateB[0] = new JButton("+"); 
		operateB[1] = new JButton("-"); 
		operateB[2] = new JButton("*"); 
		operateB[3] = new JButton("/"); 
		operateB[4] = new JButton("pow"); 
		operateB[5] = new JButton("sqrt"); 
		operateB[6] = new JButton("+/-"); 
		operateB[7] = new JButton("=");
		//把操作符按钮添加到操作面板上
		operatePane.setLayout(new GridLayout(4,2,1,1)) ;
		for(int i=0; i<8; i++) 
			operatePane.add(operateB[i]) ;
		
		showPane.setLayout(new BorderLayout()) ;
		showPane.add(result, BorderLayout.NORTH); 
		
		mainPane.setLayout(new BorderLayout()) ;
		mainPane.add(showPane, BorderLayout.NORTH); 
		mainPane.add(numPane, BorderLayout.WEST); 
		mainPane.add(operatePane, BorderLayout.EAST); 
		
		this.add(mainPane, BorderLayout.CENTER); 
		this.setSize(WIDTH, HEIGHT); 
		
		/*try{
			//将LookAndFeel设置成windows样式
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel") ;
		}catch(Exception e){
			e.printStackTrace() ;
		}*/
		
		Toolkit too = Toolkit.getDefaultToolkit() ;
		Dimension screenSize = too.getScreenSize() ;
		this.setLocation((screenSize.width-WIDTH)/2, (screenSize.height-HEIGHT)/2) ;
		
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
		this.setResizable(false); 
		this.pack(); 
		
		ButtonListener button = new ButtonListener() ;
		for(int i = 0; i < numB.length; i++)
			numB[i].addActionListener(button) ;
		for(int i=0;i<operateB.length;i++)
			operateB[i].addActionListener(button) ;
		
	}

	class ButtonListener implements ActionListener 
	{ 
		private String last; //存储上一此操作符 
		private String strVal; //存储数字对应的字符串 
		private double total; //总数 
		private double number; //存储新输入的数 
		private boolean firsttime; //判断是否第一次按下的是操作符按钮 
		private boolean operatorPressed;//判断是否已经按过操作符按钮 

		public ButtonListener() 
		{ 
			firsttime = true; 
			strVal = ""; 
		}
	
		//事件处理
		public void actionPerformed(ActionEvent e){
		
			String str = ((JButton)e.getSource()).getText().trim() ;
			if(Character.isDigit(str.charAt(0)))
				handleNumber(str) ;
			else
				calculate(str) ;
		
		}
	
		//判断是一元操作符还是二元操作符,并根据操作符类型做计算 
		public void calculate(String op) 
		{ 
			operatorPressed = true; 
			
			if(firsttime && !isUnary(op)) 
			{ 
				total = getNumberOnDisplay(); 
				firsttime = false; 
			} 
			if(isUnary(op)) 
			{ 
				handleUnaryOp(op); 
			} 
			else if(last != null) 
			{ 
				handleBinaryOp(last); 
			} 
			if(! isUnary(op)) 
			{ 
				last = op; 
			} 
		} 
	
		//判断是否一元操作符 
		public boolean isUnary(String s) 
		{ 
			return s.equals("=") || s.equals("cls") || s.equals("sqrt") 
									|| s.equals("+/-") || s.equals("."); 
		} 

		//处理一元操作符 
		public void handleUnaryOp(String op) 
		{ 
			if(op.equals("+/-")) 
			{
				number = negate(getNumberOnDisplay() + ""); 
				result.setText(""); 
				result.setText(number + ""); 
				return; 
			}
			else if(op.equals(".")) 
			{ 
				handleDecPoint(); 
				return; 
			}
			else if(op.equals("sqrt")) 
			{ 
				number = Math.sqrt(getNumberOnDisplay()); 
				result.setText(""); 
				result.setText(number + ""); 
				return; 
			}
			else if(op.equals("=")) 
			{// 
				if(last!= null && !isUnary(last)) 
				{ 
					handleBinaryOp(last); 
				} 
				last = null; 
				firsttime = true; 
				return; 
			}
			else 
			{ 
				clear(); 
			} 
		} 

		//处理二元运算符 
		public void handleBinaryOp(String op) 
		{ 
			if(op.equals("+")) 
			{ 
				total +=number; 
			}
			else if(op.equals("-")) 
			{ 
				total -=number; 
			}
			else if(op.equals("*")) 
			{ 
				total *=number; 
			}
			else if(op.equals("/")) 
			{ 
				try 
				{ 
					total /=number; 
				}catch(ArithmeticException ae){} 
			}
			else if(op.equals("pow")) 
				total = Math.pow(total, number); 
			//result.setText(""); 
			last = null; 
			// strVal = ""; 
			number = 0; 
			result.setText(total + ""); 
		} 

		//该方法用于处理数字按钮 
		public void handleNumber(String s) 
		{ 
			if(!operatorPressed) 
			{ 
				strVal += s; 
			}
			else 
			{ 
				operatorPressed = false; 
				strVal = s; 
			} 
		 
			number = new Double(strVal).doubleValue(); 
			result.setText(""); 
			result.setText(strVal); 
		} 

		//该方法用于按下"."按钮 
		public void handleDecPoint() 
		{ 
			operatorPressed = false; 
	 
			if(strVal.indexOf(".")<0) 
			{ 
				strVal += "."; 
			} 
			result.setText(""); 
			result.setText(strVal); 
		} 

		//该方法用于将一个数求反 
		public double negate(String s) 
		{ 
			operatorPressed = false; 
			//如果是一个整数,去掉小数点后面的0 
			if(number == (int)number) 
			{ 
				s = s.substring(0,s.indexOf(".")); 
			} 

			//如果无"-"增加在该数的前面 
			if(s.indexOf("-")<0) 
			{ 
				strVal = "-" + s; 
			} 
			else 
			{ 
				strVal = s.substring(1); 
			} 
			return new Double(strVal).doubleValue(); 
		} 

		//将显示框中的值转换成Double 
		public double getNumberOnDisplay() 
		{ 
			return new Double(result.getText()).doubleValue(); 
		} 

		//清除屏幕并设置所有的标识 
		public void clear() 
		{ 
			firsttime = true; 
			last = null; 
			strVal = ""; 
			total = 0; 
			number = 0; 
			result.setText("0"); 
		} 
	}

	public static void main(String[] args) { 
		Calculate c = new Calculate("简单的计算器程序"); 
		c.setVisible(true); 
	} 
}
 
0
1
分享到:
评论

相关推荐

    基于Java swing组件实现简易计算器

    9. 计算器的实现:计算器是Java swing组件中的一种常见应用,通过使用JFrame、JButton、JPanel、JTextArea等组件,可以创建一个简单的计算器。 10. 代码优化:代码优化是Java swing组件中的一种重要步骤,用于优化...

    java swing 编写的简易计算器

    在这个“java swing 编写的简易计算器”项目中,我们将会探讨如何利用Swing组件来构建一个基本的计算器程序,适合初学者和小白进行学习。这个项目是用Eclipse IDE设计的,因此对于那些不熟悉此IDE的人来说,它提供了...

    Java swing编写的计算器界面.zip

    最后,记得将所有组件添加到JFrame中,并调用`setVisible(true)`方法显示窗口,这样就完成了一个基本的Java Swing计算器应用。 通过学习这个示例,开发者不仅可以掌握Java Swing的基本用法,还能了解GUI编程的设计...

    JavaSwing实现简单计算器

    本项目"JavaSwing实现简单计算器"就是利用这些组件来创建一个功能基础的计算器应用,可以处理基本的数学运算,包括加、减、乘、除,同时也支持负数、小数以及括号的使用。下面我们将详细探讨实现这样一个计算器所需...

    基于Java Swing实现的程序员计算器源码包+jar包+exe可执行文件.zip

    基于Java Swing实现的程序员计算器源码包+jar包+exe可执行文件.zip 95分以上课程设计,代码完整下载即用,无需修改确保可以运行。 基于Java Swing实现的程序员计算器源码包+jar包+exe可执行文件.zip 代码完整下载...

    java swing界面做的计算器

    用java swing界面做的计算器,能连续加减乘除,功能基本到位

    JAVA Swing简易科学计算器

    总的来说,JAVA Swing简易科学计算器项目涉及了JAVA Swing GUI设计、事件驱动编程、数学函数的使用以及二进制计算,是学习和实践JAVA GUI编程的一个典型实例。通过这样的项目,开发者能够提升对JAVA编程语言以及图形...

    javaswing简易计算器

    使用java swing 编写的计算器,可提高初学者对gui的理解!

    java Swing简单计算器

    t e){ d.dispose();}});cc.add(t4);cc.add(db1);cc.add(db2);d.pack();d.show();}});b3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){t3.setText("按钮3被点击了!...

    java swing写的计算器

    java swing做的计算器,不能连续运算xxxxxxxxxxxxxxxxxxxx

    Java Swing实现一个计算器.docx

    "Java Swing实现一个计算器" 本资源使用Java Swing实现了一个计算器,能够进行整数、浮点数、正负数的运算,计算器的实现中还利用了中缀式求值。下面是对该资源中涉及的知识点的详细解释: Java Swing的介绍 Java...

    学生练习——Java Swing开发的小计算器

    在这个"学生练习——Java Swing开发的小计算器"项目中,学生利用Swing库创建了一个简易的计算器程序,用于执行基本的数学运算,如加、减、乘、除等。 Swing库提供了大量的组件,如JButton、JLabel、JTextField等,...

    Java swing强大的科学计算器

    在这个场景中,我们讨论的是一个使用Java Swing构建的科学计算器应用。这个计算器不仅具备基本的四则运算功能,还可能包含了更复杂的数学运算,如对数、指数、平方根、三角函数等,使得它更适合进行科学计算。 1. *...

    基于Java Swing实现的程序员计算器【源码包+jar包+exe可执行文件】

    本项目是一套基于Java Swing实现的程序员计算器,主要针对计算机相关专业的正在学习java的学生与需要项目实战练习的Java学习者。 包含:项目源码、jar包、exe可执行文件等。 项目都经过严格调试,确保可以运行! 该...

    Swing实现一个简单的计算器

    这个示例展示了如何使用 Swing 来实现一个简单的计算器。我们使用了多种 Swing 组件、布局管理器和事件监听来实现这个示例。这个示例展示了 Swing 的一些优点,例如易于使用的组件和灵活的布局管理。

    java中Swing做的简单计算器

    总之,这两个Java Swing计算器示例涵盖了GUI设计、事件处理、基本算术运算、数据结构(如StringBuilder或Stack)以及Swing组件的使用。通过比较这两个程序,我们可以学习到代码优化、效率提升以及Swing库的深度应用...

    swing计算器,swing计算器 swing计算器

    Swing计算器是一款基于Java Swing库开发的简单计算工具。Swing是Java的一种图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分,主要用于构建桌面应用程序。本项目的核心在于利用Swing组件来...

    Java Swing计算器

    Java Swing计算器是一个基于Java GUI库Swing开发的桌面应用程序,用于执行基本的数学运算,如加、减、乘、除。这个项目对于学习Java GUI编程和Swing组件的使用非常有帮助,尤其适合Java初学者作为期末课程设计的实践...

    简单的计算器(java.swing界面实现)

    一个简单的Java Swing计算器程序可能包含以下几个主要部分: 1. 类定义:通常是一个名为Calculator的公共类。 2. 构造函数:初始化JFrame,设置大小,添加组件,并设置可见。 3. 定义按钮和标签:实例化JButton和...

    java swing 实现计算器源码

    在这个"java swing 实现计算器源码"项目中,开发者使用Swing构建了一个计算器应用程序,尽管未经过全面测试,但理论上应该能够正常运行。 Swing 提供了一系列的组件,如 JButton、JLabel、JTextField 等,这些组件...

Global site tag (gtag.js) - Google Analytics