//实现了 =、-、+、*、/等基本的操作
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);
}
}
分享到:
相关推荐
9. 计算器的实现:计算器是Java swing组件中的一种常见应用,通过使用JFrame、JButton、JPanel、JTextArea等组件,可以创建一个简单的计算器。 10. 代码优化:代码优化是Java swing组件中的一种重要步骤,用于优化...
在这个“java swing 编写的简易计算器”项目中,我们将会探讨如何利用Swing组件来构建一个基本的计算器程序,适合初学者和小白进行学习。这个项目是用Eclipse IDE设计的,因此对于那些不熟悉此IDE的人来说,它提供了...
最后,记得将所有组件添加到JFrame中,并调用`setVisible(true)`方法显示窗口,这样就完成了一个基本的Java Swing计算器应用。 通过学习这个示例,开发者不仅可以掌握Java Swing的基本用法,还能了解GUI编程的设计...
本项目"JavaSwing实现简单计算器"就是利用这些组件来创建一个功能基础的计算器应用,可以处理基本的数学运算,包括加、减、乘、除,同时也支持负数、小数以及括号的使用。下面我们将详细探讨实现这样一个计算器所需...
基于Java Swing实现的程序员计算器源码包+jar包+exe可执行文件.zip 95分以上课程设计,代码完整下载即用,无需修改确保可以运行。 基于Java Swing实现的程序员计算器源码包+jar包+exe可执行文件.zip 代码完整下载...
用java swing界面做的计算器,能连续加减乘除,功能基本到位
总的来说,JAVA Swing简易科学计算器项目涉及了JAVA Swing GUI设计、事件驱动编程、数学函数的使用以及二进制计算,是学习和实践JAVA GUI编程的一个典型实例。通过这样的项目,开发者能够提升对JAVA编程语言以及图形...
使用java swing 编写的计算器,可提高初学者对gui的理解!
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做的计算器,不能连续运算xxxxxxxxxxxxxxxxxxxx
"Java Swing实现一个计算器" 本资源使用Java Swing实现了一个计算器,能够进行整数、浮点数、正负数的运算,计算器的实现中还利用了中缀式求值。下面是对该资源中涉及的知识点的详细解释: Java Swing的介绍 Java...
在这个"学生练习——Java Swing开发的小计算器"项目中,学生利用Swing库创建了一个简易的计算器程序,用于执行基本的数学运算,如加、减、乘、除等。 Swing库提供了大量的组件,如JButton、JLabel、JTextField等,...
在这个场景中,我们讨论的是一个使用Java Swing构建的科学计算器应用。这个计算器不仅具备基本的四则运算功能,还可能包含了更复杂的数学运算,如对数、指数、平方根、三角函数等,使得它更适合进行科学计算。 1. *...
本项目是一套基于Java Swing实现的程序员计算器,主要针对计算机相关专业的正在学习java的学生与需要项目实战练习的Java学习者。 包含:项目源码、jar包、exe可执行文件等。 项目都经过严格调试,确保可以运行! 该...
这个示例展示了如何使用 Swing 来实现一个简单的计算器。我们使用了多种 Swing 组件、布局管理器和事件监听来实现这个示例。这个示例展示了 Swing 的一些优点,例如易于使用的组件和灵活的布局管理。
总之,这两个Java Swing计算器示例涵盖了GUI设计、事件处理、基本算术运算、数据结构(如StringBuilder或Stack)以及Swing组件的使用。通过比较这两个程序,我们可以学习到代码优化、效率提升以及Swing库的深度应用...
Swing计算器是一款基于Java Swing库开发的简单计算工具。Swing是Java的一种图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分,主要用于构建桌面应用程序。本项目的核心在于利用Swing组件来...
Java Swing计算器是一个基于Java GUI库Swing开发的桌面应用程序,用于执行基本的数学运算,如加、减、乘、除。这个项目对于学习Java GUI编程和Swing组件的使用非常有帮助,尤其适合Java初学者作为期末课程设计的实践...
一个简单的Java Swing计算器程序可能包含以下几个主要部分: 1. 类定义:通常是一个名为Calculator的公共类。 2. 构造函数:初始化JFrame,设置大小,添加组件,并设置可见。 3. 定义按钮和标签:实例化JButton和...
在这个"java swing 实现计算器源码"项目中,开发者使用Swing构建了一个计算器应用程序,尽管未经过全面测试,但理论上应该能够正常运行。 Swing 提供了一系列的组件,如 JButton、JLabel、JTextField 等,这些组件...