qwe.jpg

多功能科学计算器(包括进制转换,三角函数,四则运算等)

Basic Framework

屏幕快照 2017-12-06 08.45.28.png

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; //保存+,-,*,/,=命令0

private 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;

}

else

displayField.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 ); //隐藏对话框

else

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 ) { }

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

屏幕快照 2017-12-06 08.48.57.png

屏幕快照 2017-12-06 08.49.15.png

Source Download

Please click the address->My Calculator

Summarize

运用两个面板的叠加做出界面。

通过在按钮的单击事件处理方法中调用类的成员方法calculate()来进行简易计算器的各种运算,并正确实现运算功能。

调用Math包中的方法实现各函数功能。

添加菜单条,列出‘选项’、‘进制转换’、‘帮助’等菜单选项,并分别实现‘选项’中‘退出’的功能,通过调用Integer包中的方法实现二进制、八进制、十六进制的转换,‘帮助’菜单栏中‘用法’的提示对话框。

整个程序对话框可实现最小化、最大化、关闭。

更多推荐

java三角函数计算器_java实现多功能科学计算器(包括进制转换,三角函数,四则运算等)...