//实现了 =、-、+、*、/等基本的操作
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);
}
}
分享到:
相关推荐
主要介绍了基于Java swing组件实现简易计算器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
利用JavaSwing实现简单的计算器,输入计算表达式得出结果,支持左右括号,负数以及小数。简单处理表达式不正确的情况,并且负数需打上括号。
Java swing编写的计算器界面.zip
基于Java Swing实现的程序员计算器源码包+jar包+exe可执行文件.zip 95分以上课程设计,代码完整下载即用,无需修改确保可以运行。 基于Java Swing实现的程序员计算器源码包+jar包+exe可执行文件.zip 代码完整下载...
用java swing界面做的计算器,能连续加减乘除,功能基本到位
用Swing 编写,单击按钮“+”变“-”,按“-”变“*”按“*”变“/",实现加减乘除的简单计算器。
使用java swing 编写的计算器,可提高初学者对gui的理解!
供小白,新手学习的java-swing编写的小桌面程序,工程最好以eclipse打开
java swing做的计算器,不能连续运算xxxxxxxxxxxxxxxxxxxx
采用JAVA Swing编写的图形化计算器,JAVA大作业,可实现基本运算,三角函数,二进制等功能。
用Java Swing开发的小计算器,学生的一次小小的练习作业。
本项目是一套基于Java Swing实现的程序员计算器,主要针对计算机相关专业的正在学习java的学生与需要项目实战练习的Java学习者。 包含:项目源码、jar包、exe可执行文件等。 项目都经过严格调试,确保可以运行! 该...
java编写的简单的计算器,主要用到swing的基础知识,是课本上的作业。希望对大家有参考价值。
用java swing实现的一个计算器,与windows自带的标准型计算器功能差不多了
用Swing实现的一个计算器的源码,代码简洁易懂有注释,可以运行
本资源使用Java Swing实现了一个计算器, 计算器能进行整数,浮点数,正负数的运算,计算器的实现中还利用了中缀式求值
通过Java Swing实现一个用于完成课程设计的Java Swing计算器程序代码,直接导入IDEA编辑器就可以启动使用,支持加减乘除清除运算结果,UI页面清爽,亲测非常好用。
利用Java Swing实现的计算器,适用各种加减乘除复杂运算(可作为Java期末课程设计)
很强大,无bug的科学计算器 。。。。。用的Java swing,工具netbeans
用java swing 实现的计算器,虽未经测试,但可以应用,有源代码,可运行