java计算器所有代码 java计算器所有代码大全

求java计算器的代码import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class Calculator extends JFrame{
private float op1,op2;//定义两个变量存放需要运算的值
private String str="";//定义str去和text进行交叉赋值
private String opr,co;//opr存放符合,co用来存放复制的内容
private double re;//用来存放运算的结果
private boolean bo=false;//是否进行了 -*/运算
private boolean btime=false;//时间开关
Container contentpane=this.getContentPane();
JPanel panel1=new JPanel(new BorderLayout()),
panel2=new JPanel(new FlowLayout()),
panel3=new JPanel(new GridLayout(4,5)),
panel4=new JPanel(new BorderLayout()),
panel5=new JPanel(new BorderLayout());
//菜单栏
JMenuBar menubar=new JMenuBar();
JMenu edit=new JMenu("编辑(E)"),
find=new JMenu("查看(V)"),
help=new JMenu("帮助(H)");
JMenuItem copy=new JMenuItem("复制(C)",'C'),
paste=new JMenuItem("粘贴(P)",'P'),
standard=new JMenuItem("标准型(T)",'T'),
science=new JMenuItem("科学型(S)",'S'),
numarray=new JMenuItem("数字分组(I)",'I'),
helptopic=new JMenuItem("帮助主题(H)",'H'),
aboutcal=new JMenuItem("关于计算器(A)",'A');
//输入文本框
JTextField text=new JTextField(25);
//数字键
JButtonone=new JButton("1"),
two=new JButton("2"),
three=new JButton("3"),
four=new JButton("4"),
five=new JButton("5"),
six=new JButton("6"),
seven=new JButton("7"),
eight=new JButton("8"),
nine=new JButton("9"),
zero=new JButton("0");
//功能键
JButton division=new JButton("/"),
multiply=new JButton("*"),
addition=new JButton(" "),
subtration=new JButton("-"),
sqrt=new JButton("sqrt"),
residual=new JButton("%"),
sign=new JButton(" /-"),
dot=new JButton("."),
reciprocal=new JButton("1/X"),
amount=new JButton("="),
backspace=new JButton("Backspace"),
ce=new JButton("CE"),
c=new JButton("C"),
time=new JButton("time");
public Calculator() {
contentpane.setLayout(new BorderLayout());
//textField文本从右边开始写
text.setHorizontalAlignment(SwingConstants.RIGHT);
text.setText("0.");
//菜单栏添加
edit.add(copy);
edit.add(paste);
find.add(standard);
find.add(science);
find.addSeparator();
find.add(numarray);
help.add(helptopic);
help.addSeparator();
help.add(aboutcal);
//把组件添加至容器中
menubar.add(edit);
menubar.add(find);
menubar.add(help);
panel1.add(menubar,"North");
panel1.add(text,"West");
//添加数字、功能键至panel2、panel3
panel2.add(backspace);
panel2.add(ce);
panel2.add(c);
panel2.add(time);
panel3.add(seven);
panel3.add(eight);
panel3.add(nine);
panel3.add(division);
panel3.add(sqrt);
panel3.add(four);
panel3.add(five);
panel3.add(six);
panel3.add(multiply);
panel3.add(residual);
panel3.add(one);
panel3.add(two);
panel3.add(three);
panel3.add(subtration);
panel3.add(reciprocal);
panel3.add(zero);
panel3.add(sign);
panel3.add(dot);
panel3.add(addition);
panel3.add(amount);
panel4.add(panel2,"North");
panel4.add(panel3,"West");
panel5.add(panel1,"North");
panel5.add(panel4,"West");
contentpane.add(panel5,"North");
//事件
//助记符
edit.setMnemonic('E');
find.setMnemonic('V');
help.setMnemonic('H');
//快捷键
KeyStroke kcopy=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK);
copy.setAccelerator(kcopy);
KeyStroke kpaste=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK);
paste.setAccelerator(kpaste);
//0-9、.的显示事件
actionlistener1 al1=new actionlistener1();
one.addActionListener(al1);
two.addActionListener(al1);
three.addActionListener(al1);
four.addActionListener(al1);
five.addActionListener(al1);
six.addActionListener(al1);
seven.addActionListener(al1);
eight.addActionListener(al1);
nine.addActionListener(al1);
//小数点的ActionListener事件
dot.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int count;
count=str.length();
//1.第一位就为.时改变text中内容为:"0."
if(count==0){
str="0.";
text.setText(str);
}
//2.不可以重复按"."
else {if(!str.contains(".")){
str =".";
text.setText(str);
}
else
System.out.println("您再点的话,输入的将不再是小数了!");
}
}
});
//如果第一位是0那么第二位就不可以为0
zero.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int count;
count=str.length();
if(bo){
if(!(str.contains("0")count==1)){
str="";
str ="0";
text.setText(str);
}else
System.out.println("您再点的话,输入的将不再是数字了!");
}
else{
if(!(str.contains("0")count==1)){
str ="0";
text.setText(str);
}else
System.out.println("您再点的话 , 输入的将不再是数字了!");
}
bo=false;
}
});
// 、-、*、/、%运算
actionlistener3 al3=new actionlistener3();
addition.addActionListener(al3);
subtration.addActionListener(al3);
multiply.addActionListener(al3);
division.addActionListener(al3);
residual.addActionListener(al3);
//CE和C清空按钮时间
actionlistener2 al2=new actionlistener2();
ce.addActionListener(al2);
c.addActionListener(al2);
//退格键
backspace.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int count;
count=str.length()-1;
if(bo==false){
if(count=0){
str=str.substring(0,count);
text.setText(str);
}
else
text.setText("0.");
}else
System.out.println("您现在正进行法则运算!");
}
});
//求平方根
sqrt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int count;
count=str.length();
if(count!=0){
op1=Float.parseFloat(text.getText());
re=Math.sqrt(op1);
String str1=String.valueOf(re);
text.setText(str1);
str="";
}
else
System.out.println("您现在的按sqrt键毫无意义");
}
});
//求倒数
reciprocal.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int count;
count=str.length();
if(count!=0){
op1=Float.parseFloat(text.getText());
if(op1!=0){
re=1/op1;
String str1=String.valueOf(re);
text.setText(str1);
str=str1;
}
else{
text.setText("除数不可以为0的");
str="";
}
}
else
System.out.println("您现在的按1/X键毫无意义");
}
});
//=事件
amount.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
op2=Float.parseFloat(str);
//需判断进行那种运算法则
if(opr==" "){//加法运算
re=op1 op2;
String str1=String.valueOf(re);
text.setText(str1);
str=String.valueOf(re);
}else{
if(opr=="-"){//减法运算
re=op1-op2;
String str1=String.valueOf(re);
text.setText(str1);
str=String.valueOf(re);
}else{
if(opr=="*"){//乘法运算
re=op1*op2;
String str1=String.valueOf(re);
text.setText(str1);
str=String.valueOf(re);
}else{
if(opr=="/"op2!=0){//除法运算
re=op1/op2;
String str1=String.valueOf(re);
text.setText(str1);
str=String.valueOf(re);
}else{
if(opr=="%"){//取余运算
re=op1%op2;
String str1=String.valueOf(re);
text.setText(str1);
str="";
}
else if(op2==0){
text.setText("除数不可以为0的");
str="";
}
}
}
}
}
//打印看看
System.out.print(op1);
System.out.print(opr);
System.out.print(op2 "=");
System.out.print(re);
System.out.println();
}
});
//复制事件
copy.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int count;
count=str.length();
if(count!=0){
co=text.getText();
}
else
System.out.println("没有可复制的对象");
}
});
//粘贴事件
paste.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
str=co;
text.setText(str);
}
});
//时间事件
time.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(btime==false){
String st=(new Date()).toString();
text.setText(st);
str="";
btime=true;
}
else{
text.setText(str);
btime=false;
}
}
});
// /-事件
sign.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int a=Integer.valueOf(str);
a=a*(-1);
str=String.valueOf(a);
text.setText(str);
}
});
}
//定义1-9按钮在text中显示的内部类
class actionlistener1 implements ActionListener{
public void actionPerformed(ActionEvent e){
JButton button=(JButton)e.getSource();
String btext=button.getText();
//如果第一位为0再输入其他非零的整数时将零忽略
if(bo){
if(str.indexOf("0")==0str.length()==1){
str="";
str =btext;
text.setText(str);
}else{
str="";
str =btext;
text.setText(str);}
}else{
if(str.indexOf("0")==0str.length()==1){
str="";
str =btext;
text.setText(str);
}else{
str =btext;
text.setText(str);
}
}
bo=false;
}
}
//定义清空text中内容的内部类
class actionlistener2 implements ActionListener{
public void actionPerformed(ActionEvent e){
str="";
text.setText("0.");
}
}
//定义 、-、*、/、%运算的内部类
class actionlistener3 implements ActionListener{
public void actionPerformed(ActionEvent e){
int count;
count=str.length();
if(count!=0){
JButton button=(JButton)e.getSource();
opr=button.getText();
op1=Float.parseFloat(str);
bo=true;
}
else
System.out.println("您现在的按键毫无意义!");
}
}
public static void main(String[] args){
Calculator cc=new Calculator();
cc.pack();
cc.setResizable(false);//不可最大化
cc.setVisible(true);
cc.setTitle("计算器");
cc.setDefaultCloseOperation(EXIT_ON_CLOSE);
Dimension scmsize=Toolkit.getDefaultToolkit().getScreenSize();
int w=cc.getSize().width;
int h=cc.getSize().height;
int x=(scmsize.width-w)/2;
int y=(scmsize.height-h)/2;
cc.setLocation(x, y);
}
}
Java计算器源代码import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;public class CaculatorA {
private JFrame jf;
private JButton[] jbs;
private JTextField jtf;
private JButton clear;
private double num1,num2,jieguo;
private char c;
/**
* 构造方法实例化属性
*
*/
public CaculatorA(){
jf=new JFrame("java计算器所有代码我java计算器所有代码的计算器v1.0");
jtf=new JTextField(20);
clear=new JButton("clear");
jbs=new JButton[16];
String str="123 456-789*0./=";
for(int i=0; istr.length(); i){
jbs[i]=new JButton(str.charAt(i) "");
}
init();
addEventHandler();
// setFont();
// setColor();
showMe();
}
/**
计算器java代码import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
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.JTextField;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;
class Normal{
double i,j;
public Normal(double num1,double num2){
i=num1;
j=num2;
}
public double puls(){
return i j;
}
public double subtract(){
return i-j;
}
public double multiply(){
return i*j;
}
public double divide(){
return i/j;
}
public double surpuls(){
return i%j;
}
}
class scientific extends Normal{
public scientific(int num1, int num2) {
super(num1, num2);
}
}
public class calc extends JFrame{
public static void main(String[] args) {
viewNormal VN= new viewNormal("normal");
}
}
class viewNormal extends JFrame implements ActionListener{
JPanel jp1 = new JPanel(new GridLayout(4,3,5,5));
JPanel jp2 = new JPanel(new GridLayout(5,1,5,5));
JLabel jl;
JButton[] jb;
JButton jbs,jbo,jba,jbb,jbc,jby;
StringBuffer sb = new StringBuffer();
Normal normal;
int dot=0;
double fnum=0;
double lnum=0;
double result;
String sign=null;
public viewNormal(String title){
setTitle(title);
setLayout(null);
setVisible(true);
setBounds(200,200,305,350);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jb= new JButton[12];
for(int i=0;i9;i){
jb[i]=new JButton("" (i 1));
jp1.add(jb[i]);
jb[i].addActionListener(this);
}
jb[9]=new JButton(".");
jb[10]=new JButton("0");
jb[11]=new JButton("=");
jb[9].addActionListener(this);
jb[10].addActionListener(this);
jb[11].addActionListener(this);
jp1.add(jb[9]);
jp1.add(jb[10]);
jp1.add(jb[11]);
jp1.setBounds(10, 100, 200, 200);
jbs= new JButton(" ");jbo= new JButton("-");jba= new JButton("*");
jbb= new JButton("/");jby= new JButton("%");jbc= new JButton("C");
jbs.addActionListener(this);jbo.addActionListener(this);jba.addActionListener(this);
jbb.addActionListener(this);jby.addActionListener(this);jbc.addActionListener(this);
//jp2.add(jby);
jp2.add(jbs);jp2.add(jbo);jp2.add(jba);jp2.add(jbb);jp2.add(jbc);
jp2.setBounds(215, 100, 70, 200);
jl= new JLabel("0",JLabel.RIGHT);
jl.setFont(new Font("Batang",Font.BOLD, 20));
jl.setBorder(new LineBorder(Color.black,2));
jl.setBackground(Color.white);
jl.setBounds(10, 40, 275, 50);
jl.setOpaque(true);
add(jl);
add(jp1);
add(jp2);
}
//
public void sum(){
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.puls();
result=fnum;
}
//-
private void sub() {
System.out.println(sb.toString());
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.subtract();
result=fnum;
}
//*
private void mul() {
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.multiply();
result=fnum;
}
///
private void div() {
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.divide();
result=fnum;
}
//%
private void sur() {
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.surpuls();
result=fnum;
}
// =
private void same(){
if(sign.equals(" ")){
sum();
}
if(sign.equals("-")){
sub();
}
if(sign.equals("*")){
mul();
}
if(sign.equals("/")){
div();
}
if(sign.equals("%")){
sur();
}
}
//result
public void Result(){
if(result%1!=0)
jl.setText("" result);
else
{
int i=(int)result;
jl.setText("" i);
}
}
@Override
public void actionPerformed(ActionEvent e) {
//System.out.println(sb.toString());
// 1~9
for(int i=0;i9;i){
if(e.getSource()==jb[i]!sb.toString().equals("0")){
sb.append(jb[i].getText());
jl.setText(sb.toString());
}
else if(e.getSource()==jb[i]sb.toString().equals("0")){
int d=sb.length();
sb.delete(0, d);
sb.append(jb[i].getText());
jl.setText(sb.toString());
}
}
//0
if(e.getSource()==jb[10]!sb.toString().equals("0")){
sb.append(jb[10].getText());
jl.setText(sb.toString());
}
//.
if(e.getSource()==jb[9]dot==0!sb.toString().equals("")){
dot;
sb.append(jb[9].getText());
jl.setText(sb.toString());
}
//=
if(e.getSource()==jb[11]!sb.toString().equals("")){
same();
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
//
if(e.getSource()==jbs!sb.toString().equals("")){
if(sign!=" "sign!=null)
same();
else
sum();
sign =" ";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
//-
if(e.getSource()==jbo!sb.toString().equals("")){
if(fnum==0)
fnum=2*Double.parseDouble(sb.toString());
if(sign!="-"sign!=null)
same();
else
sub();
sign ="-";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
//*
if(e.getSource()==jba!sb.toString().equals("")){
if(fnum==0)
fnum=1;
if(sign!="*"sign!=null)
same();
else
mul();
sign ="*";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
///
if(e.getSource()==jbb!sb.toString().equals("")){
if(fnum==0)
fnum=Math.pow(Double.parseDouble(sb.toString()),2);
if(sign!="/"sign!=null)
same();
else
div();
sign ="/";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
//%
//if(e.getSource()==jby!sb.toString().equals("")){
//if(fnum==0){
//fnum=Double.parseDouble(sb.toString());
//result=fnum;
//}
//else {
//if(sign!="%"sign!=null)
//same();
//else{
//lnum=Double.parseDouble(sb.toString());
//normal=new Normal(fnum,lnum);
//fnum=normal.surpuls();
//result=fnum;
//}
//}
//sign ="%";
//Result();
//int d=sb.length();
//sb.delete(0, d);
//dot=0;
//}
//clear
if(e.getSource()==jbc){
int d=sb.length();
sb.delete(0, d);
jl.setText("0");
dot=0;
fnum=0;
lnum=0;
sign=null;
}
}
}
class viewScientific extends viewNormal{
public viewScientific(String title){
super(title);
setBounds(200,200,800,500);
}
}
//等号以后输入符号用不了 , String转 double 本来就有错误,你可以用我的扩展成科学型的 。
JAVA计算器相关代码求大神{详解}我给你找找
package com.bj.calcultor;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calcultor extends Frame implements ActionListener {
public static void main(String[] args) {//定义主方
new Calcultor();//创建匿名对象,并调用test()方法;
}
//定义按钮名称
String[] arr={"1","2","3","4","5","6","7","8","9","0"," ","-","*","/","=","."};
JButton [] button=new JButton[arr.length];
JButton reset = new JButton("CE");
JTextField display = new JTextField(20);
//创建窗口,定义组件
//执行窗口事件:关闭窗口
private class WindowCloser extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
public Calcultor(){
super("计算器");//定义标题
//定义面板容器,并布局
JPanel jpanel=new JPanel(new GridLayout(4,4));
//添加按钮 , 并给按钮添加名称
for (int i = 0; iarr.length; i) {
button[i]= new JButton(arr[i]);
jpanel.add(button[i]);
}
JPanel panel2 = new JPanel();
panel2.add("Northr", display);
display.setEnabled(false);
panel2.add("East", reset);
this.add("North", panel2);
this.add("Center", jpanel);
for (int i = 0; iarr.length; i){
addWindowListener(new WindowCloser());
setVisible(true);
setSize(400,400);
pack();
button[i].addActionListener(this);
reset.addActionListener(this);
display.addActionListener(this);
}
}
@Override
public void actionPerformed(ActionEvent e) {//定义事件
// TODO Auto-generated method stub
Object target=e.getSource();
Stringlable=e.getActionCommand();
if(target==reset){
handleReset();
}else if("0123456789.".indexOf(lable)0){
handleNumber(lable);
}else{
hadleOperator(lable);
}
}
boolean isFirstDigit=true;
private void hadleOperator(String key) {
if(operator.equals(" ")){
number= Double.valueOf(display.getText());
}else if (operator.equals("-")){
number -= Double.valueOf(display.getText());
}else if (operator.equals("*")){
number *= Double.valueOf(display.getText());
}else if (operator.equals("/")){
number /= Double.valueOf(display.getText());
}else if(operator.equals("=")){
number =Double.valueOf(display.getText());
}
display.setText(String.valueOf(number));
operator=key;
isFirstDigit=true;
}
private void handleNumber(String key) {
if(true){
display.setText(key);//把键值设置为文本框内容
}else if(key.equals(".")display.getText().indexOf(".")0){
display.setText(display.getText() ".");//把文本框内容设置:display.getText() "."
}else if(!key.equals(".")){
display.setText(display.getText()key);//把文本框内容设置:display.getText() key
isFirstDigit=false;
}
}
private void handleReset() {
display.setText("0");
isFirstDigit=true;
operator="=";
}
String operator="=";
Double number=0.0;
}
java 计算器代码import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
/**
* 我的计算器 。Cheshi 继承于 JFrame , 是计算器的界面
c*/
public class Cheshi extends JFrame {
private Border border = BorderFactory.createEmptyBorder(5, 5, 5, 5);
private JTextField textbox = new JTextField("0");
private CalculatorCore core = new CalculatorCore();
private ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
String label = b.getText();
String result = core.process(label);
textbox.setText(result);
}
};
public Cheshi(String title) throws HeadlessException {
super(title);// 调用父类构造方法
setupFrame();// 调整窗体属性
setupControls();// 创建控件
}
private void setupControls() {
setupDisplayPanel();// 创建文本面板
setupButtonsPanel();// 创建按钮面板
}
// 创建按钮面板并添加按钮
private void setupButtonsPanel() {
JPanel panel = new JPanel();
panel.setBorder(border);
panel.setLayout(new GridLayout(4, 5, 3, 3));
createButtons(panel, new String[]{
"7", "8", "9", " ", "C",
"4", "5", "6", "-", "CE",
"1", "2", "3", "*", "",// 空字符串表示这个位置没有按钮
"0", ".", "=", "/", ""
});
this.add(panel, BorderLayout.CENTER);
}
/**
* 在指定的面板上创建按钮
*
* @param panel要创建按钮的面板
* @param labels 按钮文字
*/
private void createButtons(JPanel panel, String[] labels) {
for (String label : labels) {
// 如果 label 为空,则表示创建一个空面板 。否则创建一个按钮 。
if (label.equals("")) {
panel.add(new JPanel());
} else {
JButton b = new JButton(label);
b.addActionListener(listener);// 为按钮添加侦听器
panel.add(b);
}
}
}
// 设置显示面板,用一个文本框来作为计算器的显示部分 。
private void setupDisplayPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBorder(border);
setupTextbox();
panel.add(textbox, BorderLayout.CENTER);
this.add(panel, BorderLayout.NORTH);
}
// 调整文本框
private void setupTextbox() {
textbox.setHorizontalAlignment(JTextField.RIGHT);// 文本右对齐
textbox.setEditable(false);// 文本框只读
textbox.setBackground(Color.white);// 文本框背景色为白色
}
// 调整窗体
private void setupFrame() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);// 当窗体关闭时程序结束
this.setLocation(100, 50);// 设置窗体显示在桌面上的位置
this.setSize(300, 200);// 设置窗体大小
this.setResizable(false);// 窗体大小固定
}
// 程序入口
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Cheshi frame = new Cheshi("我的计算器");
frame.setVisible(true);// 在桌面上显示窗体
}
}
/**
* 计算器核心逻辑 。这个逻辑只能处理 1~2 个数的运算 。
*/
class CalculatorCore {
private String displayText = "0";// 要显示的文本
boolean reset = true;
private BigDecimal number1, number2;
private String operator;
private HashMapString, Operator operators = new HashMapString, Operator();
private HashMapString, Processor processors = new HashMapString, Processor();
CalculatorCore() {
setupOperators();
setupProcessors();
}
// 为每种命令添加处理方式
private void setupProcessors() {
processors.put("[0-9]", new Processor() {
public void calculate(String command) {
numberClicked(command);
}
});
processors.put("\\.", new Processor() {
public void calculate(String command) {
dotClicked();
}
});
processors.put("=", new Processor() {
public void calculate(String command) {
equalsClicked();
}
});
processors.put("[ \\-*/]", new Processor() {
public void calculate(String command) {
operatorClicked(command);
}
});
processors.put("C", new Processor() {
public void calculate(String command) {
clearClicked();
}
});
processors.put("CE", new Processor() {
public void calculate(String command) {
clearErrorClicked();
}
});
}
// 为每种 operator 添加处理方式
private void setupOperators() {
operators.put(" ", new Operator() {
public BigDecimal process(BigDecimal number1, BigDecimal number2) {
return number1.add(number2);
}
});
operators.put("-", new Operator() {
public BigDecimal process(BigDecimal number1, BigDecimal number2) {
return number1.subtract(number2);
}
});
operators.put("*", new Operator() {
public BigDecimal process(BigDecimal number1, BigDecimal number2) {
return number1.multiply(number2);
}
});
operators.put("/", new Operator() {
public BigDecimal process(BigDecimal number1, BigDecimal number2) {
return number1.divide(number2, 30, RoundingMode.HALF_UP);
}
});
}
// 根据命令处理 。这里的命令实际上就是按钮文本 。
public String process(String command) {
for (String pattern : processors.keySet()) {
if (command.matches(pattern)) {
processors.get(pattern).calculate(command);
break;
}
}
return displayText;
}
// 当按下 CE 时
private void clearErrorClicked() {
if (operator == null) {
number1 = null;
} else {
number2 = null;
}
displayText = "0";
reset = true;
}
// 当按下 C 时,将计算器置为初始状态 。
private void clearClicked() {
number1 = null;
number2 = null;
operator = null;
displayText = "0";
reset = true;
}
// 当按下 = 时
private void equalsClicked() {
calculateResult();
number1 = null;
number2 = null;
operator = null;
reset = true;
}
// 计算结果
private void calculateResult() {
number2 = new BigDecimal(displayText);
Operator oper = operators.get(operator);
if (oper != null) {
BigDecimal result = oper.process(number1, number2);
displayText = result.toString();
}
}
// 当按下-*/ 时(这里也可以扩展成其他中间操作符)
private void operatorClicked(String command) {
if (operator != null) {
calculateResult();
}
number1 = new BigDecimal(displayText);
operator = command;
reset = true;
}
// 当按下 . 时
private void dotClicked() {
if (displayText.indexOf(".") == -1) {
displayText= ".";
} else if (reset) {
displayText = "0.";
}
reset = false;
}
// 当按下 0-9 时
private void numberClicked(String command) {
if (reset) {
displayText = command;
} else {
displayText= command;
}
reset = false;
}
// 运算符处理接口
interface Operator {
BigDecimal process(BigDecimal number1, BigDecimal number2);
}
// 按钮处理接口
interface Processor {
void calculate(String command);
}
}
java计算器代码import java.awt.*;
import java.awt.event.*;
public class lvhaiya{
int tmp,sum,sum1,sum2=1,sum3=1;
String a,b,c,d;String s="";
Frame f=new Frame("计算器");
private String[]name={
"0","1","2","3","4","5","6","7","8","9"," ","-","*","/","=","空格"
};
public Button[] button=new Button[name.length];
TextField t=new TextField("",30);
Panel p=new Panel();
Panel p1=new Panel();
Color color=new Color(100,170,90);
public lvhaiya(){
p1.setLayout(new GridLayout(5,5));
for(int i=0;iname.length;i){
button[i]=new Button(name[i]);
p1.add(button[i]);
}
p.setLayout(new FlowLayout(FlowLayout.LEFT));
p.setBackground(color);
p.add(t);
f.add(p,BorderLayout.NORTH);
f.add(p1,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
f.addWindowListener( new WindowClose());
t.setText("0.");
for(int i=0;iname.length;i){
button[i].addActionListener(new ButtonEventl());
}
}
public static void main(String[]args){
new lvhaiya();
}
class WindowClose extends WindowAdapter{
public void windouClosing(WindowEvent e){
System.exit(0);
}
}
class ButtonEventl implements ActionListener{
public void actionPerformed(ActionEvent e)throws ArithmeticException{
String command=e.getActionCommand();
if(command.equals(" ")){
sum=Integer.parseInt(t.getText()) sum;
t.setText(String.valueOf(sum));
a=t.getText();
s="";
}
else if(command.equals("-")){
sum1=Integer.parseInt(t.getText());
b=t.getText();
s="";
}
else if(command.equals("*")){
sum2=Integer.parseInt(t.getText())*sum2;
t.setText(String.valueOf(sum2));
c=t.getText();
s="";
}
else if(command.equals("/")){
sum3=Integer.parseInt(t.getText());
d=t.getText();
s="";
}
else if(command.equals("=")){
if(a!=null){
t.setText(String.valueOf(sum tmp));
}
if(b!=null){
t.setText(String.valueOf(sum1-tmp));
}
if(c!=null){
t.setText(String.valueOf(sum2*tmp));
}
try{
if(d!=null){
t.setText(String.valueOf(sum3/tmp));
}
}
catch(ArithmeticException a){
t.setText("除数不能为零");
}
}
else if(command.equals("空格")){
sum=0;
a=null;
b=null;
c=null;
d=null;
sum1=0;
sum2=1;
sum3=1;
tmp=0;
t.setText("0");
s="";
}
else{
s=s command;
t.setText(s);
tmp=Integer.parseInt(s);
}
}
}
}
//按钮可以自己美化一下希望可以帮到你
【java计算器所有代码 java计算器所有代码大全】关于java计算器所有代码和java计算器所有代码大全的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读