Java计算器源码.docx

上传人:b****6 文档编号:6167040 上传时间:2023-01-04 格式:DOCX 页数:32 大小:23.95KB
下载 相关 举报
Java计算器源码.docx_第1页
第1页 / 共32页
Java计算器源码.docx_第2页
第2页 / 共32页
Java计算器源码.docx_第3页
第3页 / 共32页
Java计算器源码.docx_第4页
第4页 / 共32页
Java计算器源码.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

Java计算器源码.docx

《Java计算器源码.docx》由会员分享,可在线阅读,更多相关《Java计算器源码.docx(32页珍藏版)》请在冰豆网上搜索。

Java计算器源码.docx

Java计算器源码

计算器

本计算器有显示过程和不显示过程两种功能,其中不显示过程为普通计算器,类似于windows自带的计算器;显示过程的,可以显示预算过程,其中包含所需应用的部分函数,以及格式化功能(最左上角,第一个键格式化,然后输入需要格式化的数位,然后点第二个数,显示格式化结果),当一次运算结束后,会在右边自动显示运算过程,并且运算过程处有保存,复制粘贴清除功能。

代码如下:

主类:

importZF.*;

publicclassJiSuanQi{

publicstaticvoidmain(String[]args){

Calculatorc=newCalculator("计算器");

}

}

 

包ZF中的类:

Calculator类

packageZF;

/**

*计算器布局界面

*/

importjava.io.*;

importjava.awt.*;

importjavax.swing.*;

importjava.awt.event.*;

publicclassCalculatorextendsJFrameimplementsActionListener{

staticintxg=1;//用于判断是否显示过程,初始状态为显示

JSplitPanejsp1,jsp2,jsp3;

staticJTextFieldjtf;//文本框

staticJTextAreajta;//保存等的历史文本区

publicstaticStringzc;//用来暂时存储数字,实现第一个菜单选项

JScrollPaneJS;//专门用于给文本区提供滚动条

publicstaticFileDialogload,save;//声明引入对话框

BufferedReaderin;//

FileReaderreader;//

JP1jp1;

JP2jp2;

JP3jp3;

JP4jp4;

JP5jp5;

//菜单条

JMenuBarmb;

JMenum0,m1,m2;

JMenuItemm01,m02,m03,m04,m11,m12,m21,m22;

publicCalculator(Strings){

super(s);

Containercon=getContentPane();

//桌面

jp1=newJP1();

jp2=newJP2();

jp3=newJP3();

jp4=newJP4();

jp5=newJP5();

jta=newJTextArea();

jta.setEditable(false);

JS=newJScrollPane(jta);

jsp1=newJSplitPane(JSplitPane.VERTICAL_SPLIT,false,jp1,jp2);

jsp2=newJSplitPane(JSplitPane.VERTICAL_SPLIT,false,jp3,JS);

jsp3=newJSplitPane(JSplitPane.VERTICAL_SPLIT,false,jp4,jp5);

jtf=newJTextField();

jtf.setText(String.valueOf(0));

jtf.setEditable(false);

jtf.setBackground(Color.white);

load=newFileDialog(this,"读取历史运算过程",FileDialog.LOAD);

load.setVisible(false);

load.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

load.setVisible(false);

}

});

save=newFileDialog(this,"保存历史运算过程",FileDialog.SAVE);

save.setVisible(false);

save.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

save.setVisible(false);

}

});

//菜单条

mb=newJMenuBar();

m0=newJMenu("编辑");

m1=newJMenu("查看");

m2=newJMenu("帮助");

m01=newJMenuItem("复制");

m02=newJMenuItem("粘贴");

m03=newJMenuItem("读取");

m04=newJMenuItem("关闭");

m01.addActionListener(this);

m02.addActionListener(this);

m03.addActionListener(this);

m04.addActionListener(this);

m11=newJMenuItem("不显过程");

m12=newJMenuItem("显示过程");

m11.addActionListener(this);

m12.addActionListener(this);

m21=newJMenuItem("帮助主题");

m22=newJMenuItem("关于计算器");

m21.addActionListener(this);

m22.addActionListener(this);

m0.add(m01);

m0.add(m02);

m0.add(m03);

m0.add(m04);

m1.add(m11);

m1.add(m12);

m2.add(m21);

m2.addSeparator();

m2.add(m22);

mb.add(m0);

mb.add(m1);

mb.add(m2);

setJMenuBar(mb);

con.add(jtf,BorderLayout.NORTH);

con.add(jsp1,BorderLayout.CENTER);

con.add(jsp2,BorderLayout.EAST);

con.add(jsp3,BorderLayout.WEST);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setBounds(100,100,800,260);

setResizable(false);

setVisible(true);

validate();

}

publicvoidactionPerformed(ActionEvente){

if(!

jtf.getText().equals("error")){

if(e.getSource()==m01){

zc=jtf.getText();

}elseif(e.getSource()==m02){

if(zc!

=null){

if(xg==1){

if(jtf.getText().equals("0"))

jtf.setText(zc);

else

jtf.setText(jtf.getText()+zc);

}else

jtf.setText(zc);

}

}

}

if(e.getSource()==m03){//读取文件

Calculator.load.setVisible(true);

Calculator.jta.setText(null);

Strings;

if(Calculator.load.getFile()!

=null)

{

try{

Filefile=newFile(Calculator.load.getDirectory(),Calculator.load.getFile());

reader=newFileReader(file);

in=newBufferedReader(reader);

while((s=in.readLine())!

=null)

{Calculator.jta.append(s+'\n');}

in.close();

reader.close();

}catch(IOExceptione2){Calculator.jta.append("读取错误");}

}

}elseif(e.getSource()==m04){

System.exit(0);

}elseif(e.getSource()==m11){

//换窗体大小,同时换规则

setSize(320,260);

remove(jsp2);

remove(jsp3);

JP2.sf=0;

jtf.setText(String.valueOf(0));

xg=0;

//改变菜单选项的可选性

m03.setEnabled(false);

m04.setEnabled(false);

//换对齐方式

JP2.sf=0;

jtf.setEditable(false);

jtf.setBackground(Color.white);

jtf.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

validate();

}elseif(e.getSource()==m12){

setSize(800,260);

add(jsp2,BorderLayout.EAST);

add(jsp3,BorderLayout.WEST);

JP2.sf=0;

jtf.setText(String.valueOf(0));

xg=1;

m03.setEnabled(true);

m04.setEnabled(true);

JP2.eg=0;

jtf.setEditable(false);

jtf.setBackground(Color.white);

jtf.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

validate();

}elseif(e.getSource()==m21){

JOptionPane.showMessageDialog(this,

"本计算器以模仿Windows系统自带计算器为主,详情请参照系统计算器“帮助主题”。

","帮助主题",

JOptionPane.INFORMATION_MESSAGE);

}elseif(e.getSource()==m22){

newJA("关于计算器");

}

}

}

JA类

packageZF;

importjava.awt.*;

importjavax.swing.*;

publicclassJAextendsJFrame{

JLabel[]jl=newJLabel[6];

JTextField[]jtf1=newJTextField[6];

JTextField[]jtf2=newJTextField[6];

publicJA(Strings){

super(s);

setLayout(newGridLayout(6,3));

jl[0]=newJLabel("制作组:

");

jl[1]=newJLabel("组成员:

");

for(inti=2;i<6;i++){

jl[i]=newJLabel();

}

jtf1[0]=newJTextField("小叮当");

jtf1[1]=newJTextField("曹剑");

jtf1[2]=newJTextField("李剑");

jtf1[3]=newJTextField("王斌");

jtf1[4]=newJTextField("翟鹏翔");

jtf1[5]=newJTextField("奥然");

jtf2[0]=newJTextField("第一组");

jtf2[1]=newJTextField("项目经理");

for(inti=2;i<6;i++){

jtf2[i]=newJTextField("程序员");

}

for(inti=0;i<6;i++){

jtf1[i].setEditable(false);

jtf2[i].setEditable(false);

}

for(inti=0;i<6;i++){

add(jl[i]);

add(jtf1[i]);

add(jtf2[i]);

}

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setBounds(100,100,250,250);

setVisible(true);

validate();

}

}

JP1类

packageZF;

importjava.awt.*;

importjavax.swing.*;

importjava.awt.event.*;

publicclassJP1extendsJPanelimplementsActionListener{

JButtonb1,b2,b3;

publicJP1(){

setLayout(newGridLayout(1,3,5,5));

b1=newJButton("Backspace");

b2=newJButton("CE");

b3=newJButton("C");

b1.addActionListener(this);

b2.addActionListener(this);

b3.addActionListener(this);

add(b1);

add(b2);

add(b3);

}

publicvoidactionPerformed(ActionEvente){

Strings=Calculator.jtf.getText();

if(!

Calculator.jtf.getText().equals("error")){

if(e.getSource()==b1){

if(s.length()!

=1)

Calculator.jtf.setText(s.substring(0,s.length()-1));

else

Calculator.jtf.setText(String.valueOf(0));

}elseif(e.getSource()==b2){

Calculator.jtf.setText(String.valueOf(0));

if(Calculator.xg==1)

JP2.eg=0;

}

}

if(e.getSource()==b3){

Calculator.jtf.setText(String.valueOf(0));

if(Calculator.xg==0)

JP2.sf=0;

else

JP2.eg=0;

}

}

}

JP2类

packageZF;

/**

*计算器核心部分,基本算法按钮

*/

importjava.awt.*;

importjavax.swing.*;

importjava.awt.event.*;

publicclassJP2extendsJPanelimplementsActionListener{

JButtonb[]=newJButton[24];

staticinteg,sf,gs;//eg判断是否摁过按钮,sf判断算法,gs用于用于存放给格式化的位数

staticdoublesfg;//sfg用于存放各种算法的结果

floatzsg;//zsg用于存放最终算术结果

staticStringzgc,sgc,fh;/*

*zgc用于存放zsg所转换而成的字符串,sgc用于存放sfg所转化而成的字符串,

*fh用于存放显示的符号

*/

publicJP2(){

setLayout(newGridLayout(4,5,5,5));

for(inti=0;i<10;i++){

b[i]=newJButton(""+i);

}

b[10]=newJButton("+/-");

b[11]=newJButton(".");

b[12]=newJButton("+");

b[13]=newJButton("-");

b[14]=newJButton("×");

b[15]=newJButton("÷");

b[16]=newJButton("=");

b[17]=newJButton("sqrt");

b[18]=newJButton("%");

b[19]=newJButton("1/x");

for(inti=0;i<20;i++){

b[i].addActionListener(this);

}

add(b[7]);

add(b[8]);

add(b[9]);

add(b[15]);

add(b[17]);

add(b[4]);

add(b[5]);

add(b[6]);

add(b[14]);

add(b[18]);

add(b[1]);

add(b[2]);

add(b[3]);

add(b[13]);

add(b[19]);

add(b[0]);

add(b[10]);

add(b[11]);

add(b[12]);

add(b[16]);

}

publicstaticvoidNumberFa(inti){//数字法则

if(Calculator.xg==0){//如果不显示过程

doublezhs=Double.parseDouble(Calculator.jtf.getText());//zhs用于存放暂时获取的数字,以下同理

if(eg==0){//判断是否按过加法法则等按钮,如果没按过,将再次按得数字与原数字组成一个新的字符串

if(zhs!

=0||zhs==0

&&Calculator.jtf.getText().indexOf(".")!

=-1){//判断是原来的数字是否为零,为零或者不为零但有小数点

Calculator.jtf.setText(Calculator.jtf.getText()

+String.valueOf(i));

}else

//因为0不能做第一个数字(小数点除外),所以如果数字为零,则直接设置为按得数字

Calculator.jtf.setText(String.valueOf(i));

}else{//如果按过法则按钮,则直接设置文本框

Calculator.jtf.setText(String.valueOf(i));

eg=0;

}

}else{

if(eg==0||Calculator.jtf.getText().equals("0"))

Calculator.jtf.setText(String.valueOf(i));

else

Calculator.jtf.setText(Calculator.jtf.getText()

+String.valueOf(i));

eg=1;

}

}

publicstaticvoidSuanFa(){//算法法则

if(Calculator.xg==0){//如果不显示过程

doublezhs=Double.parseDouble(Calculator.jtf.getText());

Strings="零";//判断除数是否为0

switch(sf){

case0:

//表示没有按加减乘除等

sfg=zhs;

break;

case1:

sfg=sfg+zhs;

break;

case2:

sfg=sfg-zhs;

break;

case3:

sfg=sfg*zhs;

break;

case4:

if(zhs!

=0)

sfg=sfg/zh

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1