Java科学计算器程序代码.docx
《Java科学计算器程序代码.docx》由会员分享,可在线阅读,更多相关《Java科学计算器程序代码.docx(18页珍藏版)》请在冰豆网上搜索。
Java科学计算器程序代码
计算器布局显示:
功能举例:
①13+20=33
②-7*14=-98:
先输入7,再单击-/+将其变成负数,然后依次单击×号、14与=
③7!
=5040
④sin30°=0.5:
先输入30,然后按下′″按钮转换成角度值,再按下sin即可显示结果
⑤sqrt(4)=2:
利用鼠标点击4后再点击sqrt按键即可显示结果
⑥2*π=6.2832
……
源程序如下:
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.Font;
import java.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.text.DecimalFormat;
import javax.swing.BorderFactory;
importjavax.swing.ButtonGroup;
import javax.swing.JButton;
importjavax.swing.JCheckBoxMenuItem;
importjavax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
importjavax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
importjavax.swing.JTextField;
publicclassCalucatorextendsJFrame{
private JTextFieldtf;
privateJPanelpanel1,panel2,panel3,panel4;
ﻩprivate JMenuBar myBar;
private JMenumenu1, menu2,menu3;
ﻩprivateJMenuItemeditItem1,editItem2, help1,help2, help3;
privateJRadioButtonMenuItemseeItem1,seeItem2;//单选框
ﻩprivateJCheckBoxMenuItemseeItem3;//复选框
ﻩprivate ButtonGroupbgb;
ﻩprivateStringback;
ﻩprivate booleanIfResult=true,flag=false;
private Stringoper= "=";
privatedouble result=0;
ﻩprivateNumnumActionListener;
privateDecimalFormatdf;
ﻩpublic Calucator(){
super("科学计算器");//设置标题栏
df=newDecimalFormat("#.####");//保留四位小数
ﻩthis.setLayout(new BorderLayout(10,5));
ﻩﻩpanel1 =newJPanel(newGridLayout(1,3,10, 10));
ﻩpanel2=newJPanel(new GridLayout(5, 6,5,5));//5行6列
ﻩﻩpanel3=newJPanel(newGridLayout(5,1, 5,5));
ﻩpanel4=newJPanel(newBorderLayout(5,5));
/**
ﻩ *菜单栏
ﻩﻩ*/
ﻩmyBar= new JMenuBar();
ﻩmenu1 =newJMenu("编辑(E)");
menu2= new JMenu("查看(V)");
ﻩﻩmenu3=newJMenu("帮助(H)");
ﻩmenu1.setFont(newFont("宋体", Font.PLAIN, 12));
ﻩmenu2.setFont(newFont("宋体",Font.PLAIN,12));
ﻩﻩmenu3.setFont(newFont("宋体",Font.PLAIN,12));
ﻩ/**
ﻩ *编辑栏
ﻩ*/
ﻩﻩeditItem1 =newJMenuItem("复制(C)Ctrl+C");
editItem2 =newJMenuItem("粘贴(P)Ctrl+V");
ﻩeditItem1.setFont(newFont("宋体",Font.PLAIN,12));
editItem2.setFont(new Font("宋体",Font.PLAIN,12));
ﻩ/**
* 查看栏
*/
ﻩseeItem1=new JRadioButtonMenuItem("科学型(T)");
ﻩseeItem2= new JRadioButtonMenuItem("标准型(S)");
ﻩﻩseeItem3 = newJCheckBoxMenuItem("数字分组(I)");
seeItem1.setFont(newFont("宋体",Font.PLAIN,12));
ﻩseeItem2.setFont(new Font("宋体",Font.PLAIN,12));
ﻩﻩseeItem3.setFont(newFont("宋体",Font.PLAIN,12));
ﻩﻩ/**
ﻩ *帮助栏
ﻩ*/
ﻩﻩhelp1 =new JMenuItem("帮助主题(H)");
ﻩhelp2= newJMenuItem("关于计算器(A)");
ﻩﻩhelp1.setFont(new Font("宋体",Font.PLAIN,12));
ﻩﻩhelp2.setFont(new Font("宋体",Font.PLAIN,12));
ﻩbgb = new ButtonGroup();//选项组
ﻩﻩmenu1.add(editItem1);
ﻩmenu1.add(editItem2);
ﻩﻩmenu2.add(seeItem1);
ﻩmenu2.add(seeItem2);
ﻩmenu2.addSeparator();//添加一条分割线
menu2.add(seeItem3);
ﻩmenu3.add(help1);
ﻩﻩmenu3.addSeparator();//添加一条分割线
ﻩmenu3.add(help2);
ﻩﻩmyBar.add(menu1);
myBar.add(menu2);
ﻩmyBar.add(menu3);
ﻩthis.setJMenuBar(myBar);
numActionListener=newNum();//实现数字监听
ﻩ/**
ﻩ * 文本域,即为计算器的屏幕显示区域
ﻩ */
ﻩtf= newJTextField();
ﻩtf.setEditable(false);//文本区域不可编辑
tf.setBackground(Color.white);//文本区域的背景色
ﻩﻩtf.setHorizontalAlignment(JTextField.RIGHT);//文字右对齐
ﻩtf.setText("0");
ﻩtf.setBorder(BorderFactory.createLoweredBevelBorder());
init();//对计算器进行初始化
ﻩ}
/**
ﻩ* 初始化操作
ﻩ*添加按钮
*/
ﻩprivatevoid init(){
addButton(panel1,"Backspace",newClear(),Color.red);
ﻩﻩaddButton(panel1,"CE",newClear(),Color.red);
addButton(panel1,"C",newClear(),Color.red);
ﻩaddButton(panel2,"1/x",newSigns(), Color.magenta);
ﻩaddButton(panel2, "log",newSigns(),Color.magenta);
ﻩaddButton(panel2, "7", numActionListener, Color.blue);
addButton(panel2,"8",numActionListener, Color.blue);
addButton(panel2,"9",numActionListener,Color.blue);
ﻩaddButton(panel2,"÷",newSigns(),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", numActionListener, Color.blue);
addButton(panel2,"×", new Signs(),Color.red);
addButton(panel2,"sin",newSigns(),Color.magenta);
ﻩﻩaddButton(panel2,"x^2",new Signs(), Color.magenta);
ﻩaddButton(panel2,"1", numActionListener,Color.blue);
addButton(panel2,"2",numActionListener,Color.blue);
ﻩaddButton(panel2,"3",numActionListener,Color.blue);
ﻩﻩaddButton(panel2,"-",newSigns(),Color.red);
addButton(panel2,"cos",newSigns(),Color.magenta);
addButton(panel2,"x^3",newSigns(),Color.magenta);
ﻩﻩaddButton(panel2, "0", numActionListener,Color.blue);
ﻩaddButton(panel2, "-/+",newClear(),Color.blue);
ﻩaddButton(panel2,".",new Dot(),Color.blue);
addButton(panel2, "+",newSigns(),Color.red);
ﻩaddButton(panel2,"tan",newSigns(),Color.magenta);
ﻩaddButton(panel2,"%", newSigns(),Color.magenta);
addButton(panel2,"π", numActionListener,Color.orange);
ﻩaddButton(panel2,"e", numActionListener,Color.orange);
ﻩﻩaddButton(panel2,"′″", newSigns(),Color.orange);
ﻩaddButton(panel2,"=",newSigns(),Color.red);
ﻩJButtonbtns=new JButton("计算器");
ﻩbtns.setBorder(BorderFactory.createLoweredBevelBorder());
ﻩbtns.setEnabled(false);//按钮不可操作
btns.setPreferredSize(newDimension(20,20));
ﻩﻩpanel3.add(btns);//加入按钮
ﻩﻩaddButton(panel3,"MC",null,Color.red);
addButton(panel3,"MR",null, Color.red);
addButton(panel3, "MS",null, Color.red);
ﻩaddButton(panel3,"M+",null,Color.red);
ﻩﻩpanel4.add(panel1, BorderLayout.NORTH);
ﻩpanel4.add(panel2,BorderLayout.CENTER);
ﻩthis.add(tf,BorderLayout.NORTH);
ﻩthis.add(panel3,BorderLayout.WEST);
ﻩﻩthis.add(panel4);
pack();
this.setResizable(false);//窗口不可改变大小
ﻩthis.setLocation(300,200);
ﻩthis.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ﻩ}
/**
* 统一设置按钮的的使用方式
ﻩ*@parampanel
ﻩ*@paramname
* @paramaction
*@paramcolor
*/
privatevoid addButton(JPanelpanel,Stringname, ActionListeneraction, Color color){
ﻩﻩJButtonbt= newJButton(name);
panel.add(bt);//在面板上增加按钮
ﻩbt.setForeground(color);//设置前景(字体)颜色
ﻩbt.addActionListener(action);//增加监听事件
ﻩ}
/**
ﻩ *计算器的基础操作(+-× ÷)
*@param x
*/
ﻩprivate voidgetResult (doublex){
ﻩif(oper=="+"){result+=x;}
else if(oper == "-"){result-=x;}
ﻩelse if(oper=="×"){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(tf.getText());
if(i>=0){
ﻩﻩﻩ/*
ﻩﻩﻩﻩ* String.valueOf()转换为字符串
ﻩﻩﻩ*df.format()按要求保留四位小数
ﻩ *Math.sqrt()求算数平方根
ﻩﻩ*/
ﻩﻩﻩtf.setText(String.valueOf(df.format(Math.sqrt(i))));
ﻩﻩﻩ}
ﻩﻩelse{
ﻩtf.setText("负数不能开平方根");
ﻩﻩﻩ}
}
ﻩ/* log求常用对数*/
elseif(str.equals("log")){
ﻩdoublei=Double.parseDouble(tf.getText());
ﻩﻩif(i>0){
ﻩﻩﻩtf.setText(String.valueOf(df.format(Math.log(i))));
ﻩﻩﻩﻩ}else{
tf.setText("负数不能求对数");
ﻩﻩ}
ﻩﻩ}
ﻩﻩ/*%求百分比*/
ﻩelseif(str.equals("%")){
ﻩﻩﻩtf.setText(df.format(Double.parseDouble(tf.getText())/100));
ﻩ}
ﻩ/*1/x求倒数*/
ﻩelseif(str.equals("1/x")){
ﻩif(Double.parseDouble(tf.getText())== 0){
ﻩﻩtf.setText("除数不能为零");
ﻩﻩ}else{
ﻩﻩﻩtf.setText(df.format(1 /Double.parseDouble(tf.getText())));
ﻩ}
ﻩ}
/* sin求正弦函数*/
ﻩﻩelseif(str.equals("sin")){
ﻩﻩdouble i =Double.parseDouble(tf.getText());
ﻩtf.setText(String.valueOf(df.format(Math.sin(i))));
}
ﻩ/*cos求余弦函数*/
ﻩﻩelseif(str.equals("cos")){
ﻩﻩdoublei= Double.parseDouble(tf.getText());
ﻩtf.setText(String.valueOf(df.format(Math.cos(i))));
}
ﻩﻩ/*tan求正切函数*/
ﻩelse if(str.equals("tan")){
ﻩﻩﻩdouble i =Double.parseDouble(tf.getText());
ﻩtf.setText(String.valueOf(df.format(Math.tan(i))));
ﻩﻩ}
ﻩﻩ/*n!
求阶乘 */
elseif(str.equals("n!
")){
ﻩﻩﻩdoublei = Double.parseDouble(tf.getText());
ﻩif((i%2==0)||(i%2==1))//判断为整数放进行阶乘操作
ﻩﻩﻩﻩ{
ﻩintj= (int)i;//强制类型转换
ﻩﻩintresult=1;
ﻩﻩﻩﻩfor(int k=1;k<=j;k++)
ﻩﻩﻩﻩﻩresult *=k;
ﻩtf.setText(String.valueOf(result));
ﻩﻩ}
ﻩﻩelse
ﻩﻩﻩ{
ﻩﻩﻩﻩtf.setText("无法进行阶乘");
ﻩﻩﻩﻩ}
ﻩ}
/*x^2求平方*/
ﻩelseif(str.equals("x^2")){
ﻩdoublei =Double.parseDouble(tf.getText());
ﻩﻩﻩtf.setText(String.valueOf(df.format(i*i)));
ﻩ}
ﻩﻩ/*x^3求立方 */
ﻩﻩelseif(str.equals("x^3")){
ﻩﻩdoublei=Double.parseDouble(tf.getText());
ﻩﻩtf.setText(String.valueOf(df.format(i*i*i)));
ﻩ}
ﻩﻩ/*′″角度转换*/
ﻩ/**
ﻩ* 将角度值转换成弧度值,方便三角函数的计算
ﻩﻩ*/
ﻩﻩelseif(str.equals("′″")){
ﻩdoublei =Double.parseDouble(tf.getText());
ﻩﻩﻩtf.setText(String.valueOf(i/180*Math.PI));
ﻩﻩ}
ﻩ
ﻩﻩelse{
ﻩﻩif(flag){
ﻩﻩﻩﻩIfResult=false;
ﻩ}
ﻩﻩif(IfResult){
ﻩﻩoper= str;
ﻩﻩ}else{
ﻩﻩﻩgetResult(Double.parseDouble(tf.getText()));
ﻩﻩﻩﻩoper=str;
ﻩﻩﻩIfResult=true;
ﻩﻩﻩ}
ﻩﻩﻩ}
}
}
/**
* 清除按钮的事件监听
*/
ﻩclassClear implements ActionListener{
ﻩﻩpublicvoidactionPerformed(ActionEvente){
ﻩﻩ/*
ﻩ* 用ActionEvent对象的getActionCommand()方法
ﻩ*取得与引发事件对象相关的字符串
ﻩﻩ*/
ﻩStringstr=e.getActionCommand();
ﻩﻩif(str=="C"){
ﻩﻩtf.setText("0");
ﻩﻩﻩﻩIfResult=true;
ﻩﻩﻩresult= 0;
ﻩ}else if(str=="-/+"){
ﻩﻩﻩﻩdoublei=0-Double.parseDouble(tf.getText().trim());
ﻩﻩtf.setText(df.format(i));
ﻩ}else if(str=="Backspace"){
ﻩﻩﻩif(Double.parseDouble(tf.getText())>0){
ﻩﻩif(tf.getText().length()>1){
ﻩtf.setText(tf.getText().