Java科学计算器程序代码1_第1页
Java科学计算器程序代码1_第2页
Java科学计算器程序代码1_第3页
Java科学计算器程序代码1_第4页
Java科学计算器程序代码1_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算器布局显示:

功能举例:

①13+20=33

②-7*14二-98:先输入7,再单击-/+将其变成负数,然后依次单击义

号、14及=

③7!=5040

@sin300=0.5:先输入30,然后按下'〃按钮转换成角度值,再按

下sin即可显示结果

⑤sqrt(4)=2:利用鼠标点击4后再点击sqrt按键即可显示结果

⑥2*n=6.2832

源程序如下:

importjava.awt.BorderLayout;

importjava.awt.Color;

importjava.awt.Dimension;

importjava.awt.Font;

importjava.awt.GridLayout;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.text.DecimalFormat;

importjavax.swing.BorderFactory;

importjavax.swing.ButtonGroup;

importjavax.swing.JButton;

importjavax.swing.JCheckBoxMenuItem;

importjavax.swing.JFrame;

importjavax.swing.JMenu;

importjavax.swing.JMenuBar;

importjavax.swing.JMenuItom;

importjavax.swing.JPanel;

importjavax.swing.JRadioButtonMenuItem;

importjavax.swing.JTcxtField;

publicclassCalucatorextendsJFrame{

privateJTextFieldtf;

privateJPanelpanel1,panel2,panel3,panel4;

privateJMenuBarmyBar;

privateJMenumenul,menu2,menu3;

privateJMenuItomeditlteml,editltem2,hclpl,holp2,

help3;

privateJRadioButtonMenuTternseeTteml,seeTtem2;7单选框

privateJCheckBoxMenuItemseel第选框

privateButtonGroupbgb;

privateStringback;

privatebooleanIfResult=true,flag=false;

privateStringoper=〃=”;

privatedoubleresult=0;

privateNumnumActionListener;

privateDecimalFormatdf;

publicCalucatorO{

super(〃科学计算器〃);〃设置标题栏

df=newDecimalFormat("#.####〃);//保留四位小数

this.setLayout(newBorderLayout(10,5));

panel1=newJPanel(newGridLayout(1,3,10,10));

pane12=newJPanel(newGridLayout(5,6,5,5));〃5行6

pane13=newJPanel(newGridLayout(5,1,5,5));

pane14=newJPanel(newBorderLayout(5,5));

*菜单栏

myBar=newJMenuBar();

menul=newJMcnu(〃编辑(E)〃);

menu2=newJMenu(“查看(V)〃);

menu3=newJMenu("帮助(H)〃);

menul.selFont(newFont(〃宋体〃,Font.PLAINf12));

menu2.setFont(newFont(〃宋体〃,Font.PLAIN,12));

menu3.setFont(newFont(〃宋体〃,Font.PLATNy12));

*编辑栏

editlteml=newJMenuItem("复制(C)Ctrl+C,z);

editltem2=newJMenuItem(〃粘贴(P)Ctrl+Vz,);

menu3.addSeparator();//添加一条分割线

nienu3.add(help2);

myBar.add(menul);

myBar.add(menu2);

myBar.add(menu3);

this.setJMenuBar(myBar);

numActionListener=newNum();〃实现数字监听

*文本域,即为计算器的屏幕显示区域

tf=newJTextFieldO;

tf.setEditable(false);.//文本区域不可编辑

tf.setBackground(Color,white);〃文本区域的背景色

tf.setHorizontalAlignment(JTextField.RIGHT);〃文字右

对齐

tf.setText("0");

tf.setBorder(BorderFactory.createLoweredBeve1Border^));

init();〃对计算器进行初始化

*初始化操作

*添加按钮

privatevoidinit(){

addButton(panel1,“Backspace”,newClear(),Color,red);

addButton(panel1,〃CE〃,newClearO,Color,red);

addButton(panel1,〃C〃,newClear(),Color,red);

addButton(pane12,newSigns(),Color,magenta);

addButton(panel2,〃log〃,newSigns(),Color,magenta);

addButton(panel2,〃7〃,numActionListener,Color,blue);

addButton(pane12,〃8〃,numActionListener,Color,blue);

addButton(pane12,〃9〃,numActionListener,Color,blue);

addButton(panel2,〃・〃,newSignsO,Color,red);

addButton(panel2,〃n!〃,newSigns(),Color,magenta);

addButton(panel2,〃sqrt〃,newSigns(),Color,magenta);

addButton(panel2,〃4〃,numActionListener,Color,blue);

addButton(panel2,〃5〃,numActionListener,Color,blue);

addButton(panel2,〃6〃,num/XctionListener,Color,blue);

addButton(panel2,〃X〃,newSigns(),Color,red);

addButton(panel2,〃sin〃,newSigns(),Color,magenta);

addButton(panel2,newSigns(),Color,magenta);

addButton(panel2,〃1〃,numActionListener,Color,blue);

addButton(panel2,〃2〃,numActionListener,Color,blue);

addButton(panel2,〃3〃,nunv\ctionListener,Color,blue);

addButton(panel2,、newSignsO,Color,red);

addButton(panel2,“cos”,newSigns(),Color,magenta);

addButton(pane12,,zx3/z,newSigns(),Color,magenta);

addButton(panel2,〃0〃,numActionListener,Color,blue);

addButton(panel2,〃一/+〃,newClear(),Color,blue);

addButton(pane12,newDot(),Color,blue);

addButton(panel2,〃+〃,newSigns(),Color,red);

addButton(panel2,newSigns(),Color,magenta);

addButton(pane12,〃旷,newSigns(),Color,magenta);

addButton(panel2,n〃,numActionListener

Color,orange);

addButton(panel2,〃e〃,numActionListener

Color,orange);

addButton(panel2,〃''〃,newSigns(),Color,orange)

addButton(panel2,〃=”,newSigns(),Color,red);

JButtonbtns=newJButton(〃计算器〃);

btns.setBorder(BorderFactory.crcatcLowcredBcvolBorder0)

btns.setEnabled(false);//按钮不可操作

btns.setPreferredSize(newDimension(20,20));

panel3.add(btns);〃加入按钮

addButton(panel3,〃MC〃,null,Color,red);

addButton(panel3,“MR”,null,Color,red);

addButton(pane13,〃MS〃,null,Color,red);

addButton(panel3,〃M+〃,null,Color,red);

panel4.add(panel1,BorderLayout.NORTf/);

pane14.add(pane12,BorderLayout.CENTER);

this.add(tf,BorderLayout.NORT^h;

this,add(panel3,BorderLayout.WEST);

this.add(panel4);

pack();

this.setResizable(false);〃窗口不可改变大小

this.setLocation(300,200);

this.setDefaultCloseOperation(JFraire.EXIT_0N_CL0S^);

*统一设置按钮的的使用方式

*@parampanel

*@paramname

*©paramaction

*©paramcolor

privatevoidaddButton(JPanelpanel,Stringname,

ActionListeneraction,Colorcolor){

JButtonbt=newJButton(name);

panel.add(bt);〃在面板上增加按钮

bt.setForeground(color);//设置前景(字体)颜色

bt.addActionListener(action);〃增加监听事件

*计算器的基础操作(+-X-?)

*©paramx

privatevoidgetResult(doublex){

if(oper==〃+"){result+=x;}

elseif(oper=="-〃){result-=x;}

elseif(oper==〃X〃){result*=x;}

elseif(oper==〃+〃){result/-x;}

elseif(oper==〃=〃){result=x;}

tf.setText(df.format(result));

*运算符号的事件监听

classSignsimplementsActionListener!

publicvoidactionPerformed(ActionEvente){

*用ActionEvent对象的getActionCommand()方法

*取得及引发事件对象相关的字符串

Stringstr=e.getActionCommand();

/*sqrt求平方根*/

if(str.equals(〃sqrt〃)){

doublei=Double.parseDouble^i.getTextO);

if(i>=0){

*String.valueOf()转换为字符串

*df.format()按要求保留四位小数

*Math,sqrt()求算数平方根

tf.setText(String.valueOf(df.format(Math,sgrt⑴)));

else{

tf.setText(〃负数不能开平方根〃);

/*log求常用对数*/

elseif(str.equals(,zlog,z)){

doublei二Double.parseDoublektY.getTcxt());

if(i>0){

tf.setText(String.valucOf{(\^.format(Math./og(i))));

}else(

tf.setText(〃负数不能求对数〃);

/*%求百分**/

elseif(str.equals(〃%〃)){

tf.setText(df.format(Double.parscDoubie(tf.getTcxt())

100));

/*1/x求倒数*/

elseif(str.equals(〃l/x〃)){

if(Double.parseDoublekti.getlext())==0){

tf.setText(〃除数不能为零〃);

}else{

tf.setText(df.format(1

Double.parseDouble^.getText())));

/*sin求正弦函数*/

elseif(str.equals(〃sin〃)){

doublei=Double.parseDouble(tf.getText());

tf.setText(String.valueOf{(\Y.format(Math,s力[(i))));

/*cos求余弦函数*/

elseif(str.equals(〃cos〃)){

doublei=Double.parscDouble{^.getText());

tf.setText(String.format(Math,cos⑴)));

/*tan求正切函数*/

elseif(str.equals(〃tan〃)){

doublei=Double.parseDoubl.getText());

tf.setText(String.valueOf{<\i.format(Math.才a〃(i))));

/*n!求阶乘*/

elseif(str.equals(〃n!〃)){

doublei=Double.parseDouble{tf.getText());

if((i%2==0)||(i%2==l))〃判断为整数放进行阶乘操

intj=(int)i;〃强制类型转换

intresult=l;

for(intk=l;k<=j;k++)

result*=k;

tf.setText(String,(result));

else

tf.sctTcxt("无法进行阶乘〃);

/*x^2求平方*/

elseif(str.equals(〃x-2〃)){

doublei=Double.parseDouble{^.getText());

tf.setText(String.valueOf^i.format(i*i)));

/*x'3求立方*/

elseif(str.equals{

doublei=Double.parseDouble{tf.getText());

tf.setText(String.valueOf^.format(i*i*i)));

/*'"角度转换*/

*将角度值转换成弧度值,方便三角函数的计算

elseif(str.equals(〃'"〃)){

doublei=Double.parseDouble{^.getText());

tf.setText(String.pa/ueOF(i/180*Math.77));

else{

if(flag){

IfResult=false;

if(TfResult){

oper=str;

}else{

getResult(Double.parseDouble^i.getText()));

oper=str;

IfResult=true;

*清除按钮的事件监听

classClearimplementsActionListenerI

publicvoidactionPerformed(ActionEvente){

*用ActionEvent对象的getActionCommand()方法

*取得及引发事件对象相关的字符串

Stringstr=e.getActionCommand();

if(str==〃C〃){

tf.setText(〃0〃);

IfResult=true;

result=0;

}elseif(str==〃-/+〃){

doublei=0-

Double.parseDouble^i.getText().trimO);

tf.setText(df.format(i));

}elseif(str=="Backspace"){

if(Double.parseDoublekti,getlext())>0){

if(tf.getText().1ength()>1){

tf.setText(tf.getText().substring(O,

tf.getText().lengthO-1));

//使用退格删除最后一位字符

}else{

tf.setText(〃0〃);

IfResult=true;

)else(

if(tf.getText().length()>2){

tf.setText(tf.getText().substring(O,

tf.getText().lengthO-1));

}else{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论