java实现多功能科学计算器(包括进制转换,三角函数,四则运算等)
多功能科学计算器(包括进制转换,三角函数,四则运算等)
Basic Framework
calculator.java
package myCalculator;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class calculator extends Frame implements ActionListener, WindowListener
{private Container container;private GridBagLayout layout;private GridBagConstraints constraints; private JTextField displayField; //计算结果显示区private String lastCommand; //保存+,-,*,/,=命令0private double result; //保存计算结果private boolean start; //判断是否为数字的开始private JMenuBar menubar;private JMenuItem m_exit;private JMenuItem m2_ejz;private JMenuItem m2_bjz;private Dialog dialog;private Label label_dialog;private JButton button_sqrt;private JButton button_plusminus;private JButton button_CE;private JButton button_cancel;private JButton button_1;private JButton button_2;private JButton button_3;private JButton button_4;private JButton button_5;private JButton button_6;private JButton button_7;private JButton button_8;private JButton button_9;private JButton button_0;private JButton button_plus;private JButton button_minus;private JButton button_multiply;private JButton button_divide;private JButton button_point;private JButton button_equal;private JButton button_log;private JButton button_tan;private JButton button_cos;private JButton button_sin;private JButton button_exp;public calculator() //构造方法设置布局、为按钮注册事件监听器{super( "My Calculator" );this.setLocation( 350,150 );this.setSize( 450,400 );this.setResizable( true );this.setLayout( new GridLayout( 7,1 ) );this.addmyMenu(); //调用成员方法添加菜单displayField = new JTextField( 30 );this.add( displayField );displayField.setEditable( true );start = true;result = 0;lastCommand = "=";JPanel panel0 = new JPanel();panel0.setLayout( new GridLayout( 1,4,4,4 ) );JPanel panel1 = new JPanel();panel1.setLayout( new GridLayout( 1,5,4,4 ) );this.add( panel1 );button_sqrt = new JButton( "sqrt" );//根号button_plusminus = new JButton( "+/-" );button_exp = new JButton( "exp" );//底数e的n次幂button_CE = new JButton( "退位");button_cancel = new JButton( "c" );//清除JPanel panel2 = new JPanel();panel2.setLayout( new GridLayout( 1,5,4,4 ) );this.add( panel2 );button_7 = new JButton( "7" );button_8 = new JButton( "8" );button_9 = new JButton( "9" );button_log = new JButton( "log" );//对数button_divide = new JButton( "/" );//除JPanel panel3 = new JPanel();panel3.setLayout( new GridLayout(1,5,4,4) );this.add( panel3 );button_4 = new JButton( "4" );button_5 = new JButton( "5" );button_6 = new JButton( "6" );button_tan = new JButton( "tan" );//正切button_multiply = new JButton( "*" );//乘法JPanel panel4=new JPanel();panel4.setLayout( new GridLayout( 1,5,4,4 ) );this.add(panel4);button_1 = new JButton( "1" );button_2 = new JButton( "2" );button_3 = new JButton( "3" );button_cos = new JButton( "cos");//余弦button_minus = new JButton( "-" );JPanel panel5 = new JPanel();panel5.setLayout( new GridLayout( 1,5,4,4 ) );this.add( panel5 ); button_0 = new JButton( "0" );button_point=new JButton( "." );button_equal = new JButton( "=" );button_sin = new JButton( "sin" );//正弦button_plus = new JButton( "+" );panel1.add( button_sqrt );panel1.add( button_plusminus );panel1.add( button_exp );panel1.add( button_CE );panel1.add( button_cancel );panel2.add( button_7 );panel2.add( button_8 );panel2.add( button_9 );panel2.add( button_log );panel2.add( button_divide );panel3.add( button_4 );panel3.add( button_5 );panel3.add( button_6 );panel3.add( button_tan );panel3.add( button_multiply );panel4.add( button_1 );panel4.add( button_2 ); panel4.add( button_3 );panel4.add( button_cos );panel4.add( button_minus );panel5.add( button_0 );panel5.add( button_point );panel5.add( button_equal );panel5.add( button_sin );panel5.add( button_plus) ;button_sqrt.addActionListener( this );button_plusminus.addActionListener( this );button_exp.addActionListener( this );button_CE.addActionListener( this );button_cancel.addActionListener( this );button_7.addActionListener( this );button_8.addActionListener( this );button_9.addActionListener( this );button_log.addActionListener( this );button_divide.addActionListener( this );button_4.addActionListener( this );button_5.addActionListener( this );button_6.addActionListener( this );button_tan.addActionListener( this );button_multiply.addActionListener( this );button_1.addActionListener( this );button_2.addActionListener( this );button_3.addActionListener( this );button_cos.addActionListener( this );button_minus.addActionListener( this );button_0.addActionListener( this );button_point.addActionListener( this );button_equal.addActionListener( this );button_sin.addActionListener( this );button_plus.addActionListener( this );this.addWindowListener( new WinClose() ); //注册窗口监听器this.setVisible( true );}private void addmyMenu() //菜单的添加{ JMenuBar menubar = new JMenuBar(); this.add( menubar );JMenu m1 = new JMenu( "选项" );JMenu m2 = new JMenu( "进制转换" );JMenuItem m1_exit = new JMenuItem( "退出" );m1_exit.addActionListener( this );JMenuItem m2_ejz = new JMenuItem( "二进制" );m2_ejz.addActionListener( this );JMenuItem m2_bjz = new JMenuItem("八进制");m2_bjz.addActionListener( this );JMenuItem m2_sljz = new JMenuItem("十六进制");m2_sljz.addActionListener( this );JMenu m3 = new JMenu( "帮助" ); JMenuItem m3_Help = new JMenuItem( "用法" ); m3_Help.addActionListener( this ); dialog = new Dialog( this, "提示" , true ); //模式窗口dialog.setSize( 240,80 );label_dialog = new Label("", Label.CENTER ); //标签的字符串为空,居中对齐dialog.add( label_dialog ); dialog.addWindowListener( this ); //为对话框注册窗口事件监听器m1.add( m1_exit ); menubar.add( m1 );m2.add( m2_ejz );m2.add( m2_bjz );m2.add( m2_sljz );menubar.add( m2 );m3.add( m3_Help ); menubar.add( m3 ); }public void actionPerformed(ActionEvent e) //按钮的单击事件处理方法{if(e.getSource().equals( button_1 )||e.getSource().equals( button_2 )|| e.getSource().equals( button_3 )||e.getSource().equals( button_4 )||e.getSource().equals( button_5 )|| e.getSource().equals( button_6 )||e.getSource().equals( button_7 )|| e.getSource().equals( button_8 )||e.getSource().equals( button_9 ) ||e.getSource().equals( button_0 )||e.getSource().equals( button_point )||e.getSource().equals( button_plusminus )|| e.getSource().equals( button_cancel )||e.getSource().equals( button_CE )){ //非运算符的处理方法String input = e.getActionCommand();if ( start ){displayField.setText("");start = false;if( input.equals( "+/-" ) )displayField.setText( displayField.getText()+ "-" ); }if( !input.equals( "+/-" ) ){String str = displayField.getText();if( input.equals( "退格" ) ) //退格键的实现方法{ if( str.length() > 0 )displayField.setText( str.substring( 0,str.length() - 1 ) );}else if( input.equals( "C" ) ) //清零键的实现方法{displayField.setText( "0" );start = true;} elsedisplayField.setText( displayField.getText() + input );}}else if ( e.getActionCommand() == "二进制" ) //二进制的转换{int n = Integer.parseInt( displayField.getText() );displayField.setText( Integer.toBinaryString( n ) );}else if ( e.getActionCommand() == "八进制" ) //八进制的转换{int n = Integer.parseInt( displayField.getText() );displayField.setText( Integer.toOctalString( n ) );}else if ( e.getActionCommand() == "十六进制" ) //十六进制的转换{int n = Integer.parseInt( displayField.getText() );displayField.setText( Integer.toHexString( n ) );}else if ( e.getActionCommand() == "退出" ) //选项中退出的处理方法{System.exit( 0 );}else if ( e.getActionCommand() == "用法" ) //按下'帮助'菜单栏中用法的处理方法{ label_dialog.setText( "sqrt,exp等键是先输运算符再输数字\n" ); dialog.setLocation( 400,250 );dialog.setVisible( true ); }else //各运算符的识别{String command = e.getActionCommand(); if( start ){lastCommand = command;}else{calculate( Double.parseDouble( displayField.getText() ) );lastCommand = command;start = true;}}}public void calculate( double x ) //各运算符的具体运算方法{double d = 0;if ( lastCommand.equals( "+" ) ) result += x; else if (lastCommand.equals( "-" ) ) result -= x;else if ( lastCommand.equals( "*" ) ) result *= x; else if ( lastCommand.equals( "/" ) ) result /= x;else if ( lastCommand.equals( "=" ) ) result = x;else if ( lastCommand.equals( "sqrt" ) ) {d = Math.sqrt( x );result = d;}else if ( lastCommand.equals( "exp" ) ){d = Math.exp( x );result = d;}else if ( lastCommand.equals( "log" ) ){d = Math.log( x );result = d;}else if ( lastCommand.equals( "tan" ) ){d = Math.tan(x);result = d;}else if ( lastCommand.equals( "cos" ) ){d = Math.cos( x );result = d;}else if ( lastCommand.equals( "sin" ) ){d = Math.sin( x );result = d;}displayField.setText( ""+ result );} public void windowClosing( WindowEvent e ){if( e.getSource() == dialog )dialog.setVisible( false ); //隐藏对话框elseSystem.exit( 0 ); }public void windowOpened( WindowEvent e ) { }public void windowActivated( WindowEvent e ) { }public void windowDeactivated( WindowEvent e ) { }public void windowClosed( WindowEvent e ) { }public void windowIconified( WindowEvent e ) { }public void windowDeiconified( WindowEvent e ) { }public static void main( String args[] ) {calculator calculator = new calculator();}
}class WinClose implements WindowListener
{public void windowClosing( WindowEvent e ) //单击窗口关闭按钮时触发并执行实现窗口监听器接口中的方法{System.exit( 0 ); //结束程序运行}public void windowOpened( WindowEvent e ){ }public void windowActivated( WindowEvent e ){}public void windowDeactivated( WindowEvent e){ }public void windowClosed( WindowEvent e ){ }public void windowIconified( WindowEvent e ){ }public void windowDeiconified( WindowEvent e ){ }
}
Running Effect
Source Download
Please click the address->My Calculator
Summarize
- 运用两个面板的叠加做出界面。
- 通过在按钮的单击事件处理方法中调用类的成员方法calculate()来进行简易计算器的各种运算,并正确实现运算功能。
- 调用Math包中的方法实现各函数功能。
- 添加菜单条,列出‘选项’、‘进制转换’、‘帮助’等菜单选项,并分别实现‘选项’中‘退出’的功能,通过调用Integer包中的方法实现二进制、八进制、十六进制的转换,‘帮助’菜单栏中‘用法’的提示对话框。
- 整个程序对话框可实现最小化、最大化、关闭。
原文地址:www.iooy.com
java实现多功能科学计算器(包括进制转换,三角函数,四则运算等)相关推荐
- JAVA笔记整理(1):进制转换
JAVA笔记整理(1):进制转换 16.2.28 深圳坪山 多云 18℃ 爱吃螺蛳粉的巴赫 摘要:工具类转化函数:关于进制--2/10/16进制转化(Util_transform_scale)- ps ...
- Qt多功能计算器(三)——进制转换
项目介绍 本篇文章的内容是计算器的第三个功能--进制转换,这个功能相比上一个功能--三角函数的实现略微困难一些.程序的逻辑从理论上说只要修改界面和部分槽函数就可以实现2-36任意进制互相转换,这里只实 ...
- 15从零开始学Java之详解计算机中的进制转换
作者:孙玉昌,昵称[一一哥],另外[壹壹哥]也是我哦 CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 配套项目资料 https://github.com/SunLtd/LearnJava h ...
- Java中常见程序:万年历,进制转换等
1.1/2+2/3+-.+19/20 System.out.println("i\t\tm(i)");double a = 0;for (double i=1; i<=20; ...
- Java期末复习——ch02基本类型(进制转换,数据类型转换,汉字编码)
第一题: /** 写出满足以下要求的 Java 代码.* ① 声明一个float 型变量 value,并赋以初值2.5.* ② 同一行声明 2 个 boolean型的变量 b1 和 b2,其中b2 被 ...
- 科学计算机eq7,HiPER Calc Pro(多功能科学计算器)
HiPER Calc Pro是一款多功能科学计算器,不仅仅可以转换各种的变数还能计算非常复杂的内容,操作简单方便,而且特别的精准,需要经常进行精密计算的朋友赶紧来下载HiPER Calc Pro试试吧 ...
- c语言中的16进制坐标计算器,十六进制计算器_16进制计算器
16进制计算器 开始--所有程序--附件--计算器 电脑计算器16进制转换10进制怎么用 在电脑自带的计算器中启用"程序员"设置,即可进行16进制转换10进制的操作.具体操作请参照 ...
- 京东校招java笔试题_2017京东校招笔试编程题:进制转换、辗转相除
题目描述 时间限制:C/C++语言 1000MS 其他语言:3000MS 内存限制:C/C++语言 65536KB 其他语言:589824KB 题目内容:尽管是一个CS专业的学生,小B的数学基础很好并 ...
- 【大数进制转换】清华大学考研复试上机——进制转换(10—2)
进制转换 点击打开链接 时间限制:1秒 空间限制:65536K 热度指数:4274 算法知识视频讲解 题目描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出. 输入描述: ...
最新文章
- ironpython 教程_「ironpython」VS2017 IronPython做界面
- linux nginx 安装_艾编程基础教程:Linux 环境下 Nginx 安装
- spring的各种注解的作用-持续更新中
- CSS 定位 四种定位
- linux的文件系统简单介绍
- 南京大学2022年计算机考研复试分数线多少
- 智慧消防技术在安全管理中的应用与研究
- ERROR: Cannot uninstall ‘PyYAML’. It is a distutils installed project and thus we cannot accurately
- 51单片机LED 8*8点阵屏显示图形
- 【C语言】打印图案总结
- SQLMAP插件tamper编写与使用
- “51媒体网“媒体邀约,媒体现场采访的优势
- LabWindows的TEXTBOX和TABLE操作
- R语言1——R的安装和相关介绍
- Android导航软件设计开发,基于Android平台的手机导航系统的设计与实现
- svchost.exe占用内存过高解决办法
- 记录道编程题,估计是python的,用java再写。排序
- 带着红领巾,站在巨人肩膀上登鼻上脸,文化或浮躁?
- 十个健脑绝招 锻炼大脑 提高记忆(转)
- 黑鳍VS达芬奇 十大对决
热门文章
- jdk1.8版本下访问本地数据库文件(access数据库.mdb)与(火鸟数据库.fdb)踩坑记录
- 中国教育和科研计算机网络是,重大应用—热烈庆祝中国教育和科研计算机网CERNET建设20周年—中国教育和科研计算机网CERNET...
- The implementation and analysis of first-order vibration damping based on Matlab
- FreeModbus 移植笔记- 1-认识FreeModbus
- 动态规划之最优化原理与动态规划方程
- 分布式系统下的纠删码技术(一) -- Erasure Code (EC)
- Ptcms精美小说阅读网站源码+带采集规则
- 车辆逆行识别检测系统 opencv
- 替代netstat的命令之一【ss】 使用实例
- 扫描图片转换成word-捷速OCR文字识别