
qwe.jpg
多功能科學(xué)計(jì)算器(包括進(jìn)制轉(zhuǎn)換,三角函數(shù),四則運(yùn)算等)
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; //計(jì)算結(jié)果顯示區(qū)
private String lastCommand; //保存+,-,*,/,=命令0
private double result; //保存計(jì)算結(jié)果
private boolean start; //判斷是否為數(shù)字的開(kāi)始
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() //構(gòu)造方法設(shè)置布局、為按鈕注冊(cè)事件監(jiān)聽(tīng)器
{
super( "My Calculator" );
this.setLocation( 350,150 );
this.setSize( 450,400 );
this.setResizable( true );
this.setLayout( new GridLayout( 7,1 ) );
this.addmyMenu(); //調(diào)用成員方法添加菜單
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" );//根號(hào)
button_plusminus = new JButton( "+/-" );
button_exp = new JButton( "exp" );//底數(shù)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" );//對(duì)數(shù)
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() ); //注冊(cè)窗口監(jiān)聽(tīng)器
this.setVisible( true );
}
private void addmyMenu() //菜單的添加
{
JMenuBar menubar = new JMenuBar();
this.add( menubar );
JMenu m1 = new JMenu( "選項(xiàng)" );
JMenu m2 = new JMenu( "進(jìn)制轉(zhuǎn)換" );
JMenuItem m1_exit = new JMenuItem( "退出" );
m1_exit.addActionListener( this );
JMenuItem m2_ejz = new JMenuItem( "二進(jìn)制" );
m2_ejz.addActionListener( this );
JMenuItem m2_bjz = new JMenuItem("八進(jìn)制");
m2_bjz.addActionListener( this );
JMenuItem m2_sljz = new JMenuItem("十六進(jìn)制");
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 ); //標(biāo)簽的字符串為空,居中對(duì)齊
dialog.add( label_dialog );
dialog.addWindowListener( this ); //為對(duì)話框注冊(cè)窗口事件監(jiān)聽(tīng)器
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 )
)
{ //非運(yùn)算符的處理方法
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( "退格" ) ) //退格鍵的實(shí)現(xiàn)方法
{
if( str.length() > 0 )
displayField.setText( str.substring( 0,str.length() - 1 ) );
}
else if( input.equals( "C" ) ) //清零鍵的實(shí)現(xiàn)方法
{
displayField.setText( "0" );
start = true;
}
else
displayField.setText( displayField.getText() + input );
}
}
else if ( e.getActionCommand() == "二進(jìn)制" ) //二進(jìn)制的轉(zhuǎn)換
{
int n = Integer.parseInt( displayField.getText() );
displayField.setText( Integer.toBinaryString( n ) );
}
else if ( e.getActionCommand() == "八進(jìn)制" ) //八進(jìn)制的轉(zhuǎn)換
{
int n = Integer.parseInt( displayField.getText() );
displayField.setText( Integer.toOctalString( n ) );
}
else if ( e.getActionCommand() == "十六進(jìn)制" ) //十六進(jìn)制的轉(zhuǎn)換
{
int n = Integer.parseInt( displayField.getText() );
displayField.setText( Integer.toHexString( n ) );
}
else if ( e.getActionCommand() == "退出" ) //選項(xiàng)中退出的處理方法
{
System.exit( 0 );
}
else if ( e.getActionCommand() == "用法" ) //按下'幫助'菜單欄中用法的處理方法
{
label_dialog.setText( "sqrt,exp等鍵是先輸運(yùn)算符再輸數(shù)字\n" );
dialog.setLocation( 400,250 );
dialog.setVisible( true );
}
else //各運(yùn)算符的識(shí)別
{
String command = e.getActionCommand();
if( start )
{
lastCommand = command;
}
else
{
calculate( Double.parseDouble( displayField.getText() ) );
lastCommand = command;
start = true;
}
}
}
public void calculate( double x ) //各運(yùn)算符的具體運(yùn)算方法
{
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 ); //隱藏對(duì)話框
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 ) //單擊窗口關(guān)閉按鈕時(shí)觸發(fā)并執(zhí)行實(shí)現(xiàn)窗口監(jiān)聽(tīng)器接口中的方法
{
System.exit( 0 ); //結(jié)束程序運(yùn)行
}
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
- 運(yùn)用兩個(gè)面板的疊加做出界面。
- 通過(guò)在按鈕的單擊事件處理方法中調(diào)用類(lèi)的成員方法calculate()來(lái)進(jìn)行簡(jiǎn)易計(jì)算器的各種運(yùn)算,并正確實(shí)現(xiàn)運(yùn)算功能。
- 調(diào)用Math包中的方法實(shí)現(xiàn)各函數(shù)功能。
- 添加菜單條,列出‘選項(xiàng)’、‘進(jìn)制轉(zhuǎn)換’、‘幫助’等菜單選項(xiàng),并分別實(shí)現(xiàn)‘選項(xiàng)’中‘退出’的功能,通過(guò)調(diào)用Integer包中的方法實(shí)現(xiàn)二進(jìn)制、八進(jìn)制、十六進(jìn)制的轉(zhuǎn)換,‘幫助’菜單欄中‘用法’的提示對(duì)話框。
- 整個(gè)程序?qū)υ捒蚩蓪?shí)現(xiàn)最小化、最大化、關(guān)閉。
#個(gè)人主頁(yè):www.iooy.com