源代码如下所示:

package s;

import java.util.*;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class computer extends JFrame implements ActionListener {

JFrame j;

public JTextField t;

JButton b1[]=new JButton[20],b2[]=new JButton[5];

MenuBar m;

MenuItem jm[]=new MenuItem[7],jmnotepad;

Menu m1,m2,m3;

JPanel p1,p2;

String ss="";

double value=0,result=0;

int point=0,weather=1,opreter,juge=1;

boolean b11=false;

computer(){

j=new JFrame("科学计算器");

t=new JTextField("0.0",28);

j.setSize(320,270);

j.setBackground(Color.gray);

j.setLayout(new FlowLayout());//布局

j.setResizable(false);

p1=new JPanel();

p2=new JPanel();

b1[0]=new  JButton("7");

b1[1]=new  JButton("8");

b1[2]=new  JButton("9");

b1[3]=new  JButton("/");

b1[4]=new  JButton("sqrt");

b1[5]=new  JButton("4");

b1[6]=new JButton("5");

b1[7]=new JButton("6");

b1[8]=new  JButton("*");

b1[9]=new  JButton("%");

b1[10]=new  JButton("1");

b1[11]=new  JButton("2");

b1[12]=new  JButton("3");

b1[13]=new  JButton("-");

b1[14]=new  JButton("1/x");

b1[15]=new  JButton("0");

b1[16]=new  JButton("+/-");

b1[17]=new  JButton(".");

b1[18]=new  JButton("+");

b1[19]=new  JButton("=");

m=new MenuBar();  //菜单

m1=new Menu("文件");

jmnotepad=new MenuItem("记事本");

jm[0]=new MenuItem("复制",new MenuShortcut('C'));

jm[0].setEnabled(false);

jm[1]=new MenuItem("粘贴",new MenuShortcut('V'));

jm[1].setEnabled(false);

jm[2]=new MenuItem("退出",new MenuShortcut('Q'));

jm[2].addActionListener(this);

m1.add(jmnotepad);  ////////记事本

jmnotepad.addActionListener(this);

m1.add(jm[0]);

m1.add(jm[1]);

m1.addSeparator();

m1.add(jm[2]);

m2=new Menu("查看");

jm[4]=new MenuItem("科学计算型");

jm[4].addActionListener(this);

jm[5]=new MenuItem("标准型");

jm[5].addActionListener(this);

m2.add(jm[4]);

m2.add(jm[5]);

m3=new Menu("帮助");

jm[6]=new MenuItem("帮助主题");

jm[6].addActionListener(this);

m3.add(jm[6]);

m.add(m1);

m.add(m2);

m.add(m3);

j.setMenuBar(m);

j.add(t);

b2[0]=new JButton("sin");

b2[0].setToolTipText("sin中的参数为孤度");

b2[1]=new JButton("cos");

b2[1].setToolTipText("cos中的参数为孤度值");

b2[2]=new JButton("tan");

b2[2].setToolTipText("tan中的参数为孤度值");

b2[3]=new JButton("PI");

b2[3].setToolTipText("求出PI的值");

b2[4]=new JButton("C");

b2[4].setToolTipText("清楚文本框的内容");

for(int i=0;i<b2.length;i++){

b2[i].setForeground(Color.red);

b2[i].addActionListener(this);

p1.add(b2[i]);

}

j.add(p1);    

p2.setLayout(new GridLayout(4,8,5,5));

for(int i=0;i<b1.length;i++){

b1[i].setForeground(Color.blue);

}

for(int i=0;i<b1.length;i++){

p2.add(b1[i]);}

j.add(p2);

for(int i=0;i<b1.length;i++){

b1[i].addActionListener(this);

}

j.setVisible(true);

}

public static void main(String[]args){   // ////调用

new computer();

}

public void actionPerformed(ActionEvent e){

juge++;

Object get=e.getSource();

if(get==b1[17])         // 求文本框架的内容

point++;

if(get==b1[0]||get==b1[1]||get==b1[2]||get==b1[5]||get==b1[6]||get==b1[7]||get==b1[10]||get==b1[11]||get==b1[12]||get==b1[15]||get==b1[17]){

if(point>1){

if(b11||juge==2)

t.setText("");

t.setText(t.getText());

b11=false;///JToolTit().getDefaultJToolkit().beep(b1[17]);

juge++;

}

else{

if(b11||juge==2)

t.setText("");

t.setText(t.getText()+e.getActionCommand());

b11=false;

juge++;

}

}

else{

value=Double.parseDouble(t.getText());

b11=false;

if(weather>1){      //第一个数以上的其它数的加、减、乘、除、求余

switch(opreter){

case 1: {result+=Double.parseDouble(t.getText());b11=true;opreter=-1;juge=0;break;}

case 2: {result-=Double.parseDouble(t.getText());b11=true;opreter=-1;juge=0;break;}

case 3: {result*=Double.parseDouble(t.getText());b11=true;opreter=-1;juge=0;break;}

case 4: {result%=Double.parseDouble(t.getText());b11=true;opreter=-1;juge=0;break;}

case 5: {result/=Double.parseDouble(t.getText());b11=true;opreter=-1;juge=0;break;}}

 

}

if(get==jmnotepad){  ////使用线程调用系统的记事本,标准型计算器

try{

Runtime.getRuntime().exec("notepad");}

catch(java.io.IOException ee1){}

}

if(get==jm[5]){

try{

Runtime.getRuntime().exec("calc");}

catch(Exception ee2){ee2.printStackTrace();}

}

if(get==jm[2]){

System.exit(0);}

if(get==jm[6]){   /////帮助

JDialog help=new JDialog(j,"计算器帮助主题");

help.add(new JLabel("计算器帮助主题"),BorderLayout.CENTER);

help.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent close){

System.exit(0);}

});   ////help.setDefaultCloseOperation(help.EXIT_ON_CLOSE);

help.setResizable(false);

help.setSize(200,130);

help.setVisible(true);

}

if(get==jm[4]){

JDialog copu=new JDialog(j,"科学计算器");

copu.add(new JLabel("科学计算器有待更新"),BorderLayout.CENTER);

copu.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent close){

System.exit(0);}

});

copu.setResizable(false);

copu.setSize(200,130);

copu.setVisible(true);

}

if(get==b2[0])        ///sin,cos,tan,求反,倒数的值,开平方根

{result=Math.sin(Double.parseDouble(t.getText()));b11=false;}

if(get==b2[1])

{result=Math.cos(Double.parseDouble(t.getText()));b11=false;}

else if(get==b2[2])

{result=Math.tan(Double.parseDouble(t.getText()));b11=false;}

else if(get==b1[4]){

if(Double.parseDouble(t.getText())<0){

t.setText("负数不能开根");

comput1 c=new comput1();

c.clear();}

else{

result=Math.sqrt(Double.parseDouble(t.getText()));

b11=false;

}

}

else if(get==b1[16])

{result=-value;b11=false;}

else if(get==b1[14]){

if(value==0){

t.setText("零无倒数");

comput1 c=new comput1();

c.clear();}

else

{result=1/value;b11=false;}

}

if(weather==1){  //第一个数的加、减、乘、除、求余

if(get==b1[18])

{result=value;weather+=2;opreter=1;b11=true;}

else if(get==b1[13])

{result=value;weather+=2;opreter=2;b11=true;}

else if(get==b1[8])

{result=value;weather+=2;opreter=3;b11=true;}

else if(get==b1[3])

{result=value;weather+=2;opreter=4;b11=true;}

else if(get==b1[9])

{result=value;weather+=2;opreter=5;b11=true;} 

}

if(weather>1)   //综合运算

if(get==b1[18])

{weather+=2;opreter=1;juge=0;b11=true;}

else if(get==b1[13])

{weather+=2;opreter=2;juge=0;b11=true;}

else if(get==b1[8])

{weather+=2;opreter=3;juge=0;b11=true;}

else if(get==b1[3])

{weather+=2;opreter=4;juge=0;b11=true;}

else if(get==b1[9])

{weather+=2;opreter=5;juge=0;b11=true;} 

if(get==b2[4]){    /////清除,PI,结果

comput1 c=new comput1();

c.clear();

}

else if(get==b2[3])

t.setText(String.valueOf(Math.PI));

else if(get==b1[19])

{t.setText(String.valueOf(result));value=result;}

}

class comput1{   //清楚文本框架的内容

public void clear(){

value=0;

result=0;

t.setText("0.0");

ss="";

value=0;result=0;

point=0;weather=1;juge=1;

b11=false;}

}

}

运行结果如下