Java编的简单计算器
2009-03-11 22:08
330 查看
import java.awt.*; import java.awt.event.*; import java.lang.*; import javax.swing.*; import java.util.*; import java.math.*; public class Cal{ static Frame frm=new Frame("Calculator");//frame static JTextField txt=new JTextField("0");//text static JTextField time=new JTextField("00:00:00");//time //static Date hour=new Date(),min=new Date(),sec=new Date(); static Button btn[]=new Button[30];//button static Dialog dlg=new Dialog(frm);//dlg static Thread thd=new Thread(); static String btn_name[]={"MC","7","8","9","/","sqrt","MR","4","5","6","*","%", "MS","1","2","3","-","1/x","M+","0","+/-",".","+","=", "Backspace","CE","C","close","cancel"};//button_name Array_size=29 static String op=""; static double ans=0,x=0,y=0;//ans static StringBuffer str=new StringBuffer("");//Str_buffer to read number static Panel pn1=new Panel();//panel static Panel pn2=new Panel(); public Cal(){//构造函数 //frame frm.setLayout(null); frm.setLocation(250,250); frm.setSize(350,300); frm.setBackground(Color.DARK_GRAY); frm.setResizable(false); frm.setVisible(true); frm.addWindowListener(new WinLis()); //text txt.setForeground(Color.yellow); txt.setBackground(Color.gray); txt.setBounds(90,40,230,30);//输出显示 txt.setHorizontalAlignment(JTextField.RIGHT); txt.setEditable(false); frm.add(txt); time.setForeground(Color.yellow); time.setBackground(Color.gray); time.setBounds(20,40,60,30);//时间显示 time.setHorizontalAlignment(JTextField.CENTER); time.setEditable(false); frm.add(time); //panel&&button GridLayout grid1=new GridLayout(4,6); GridLayout grid2=new GridLayout(1,3); pn1.setLayout(grid1); pn2.setLayout(grid2); pn1.setBounds(20,120,300,150); pn2.setBounds(20,80,300,30); for(int i=0;i<24;i++){ btn[i]=new Button(btn_name[i]); btn[i].setForeground(Color.red); btn[i].setBackground(Color.yellow); btn[i].addActionListener(new ActLis()); pn1.add(btn[i]); } frm.add(pn1); for(int i=24;i<27;i++){ btn[i]=new Button(btn_name[i]); btn[i].setForeground(Color.red); btn[i].setBackground(Color.blue); btn[i].addActionListener(new ActLis()); pn2.add(btn[i]); } frm.add(pn2); //dialog &btn btn[27]=new Button(btn_name[27]); btn[28]=new Button(btn_name[28]); btn[27].setBackground(Color.blue); btn[28].setBackground(Color.blue); btn[27].setForeground(Color.yellow); btn[28].setForeground(Color.yellow); dlg.setTitle("确定要关闭"); dlg.setSize(200,150); dlg.setLayout(new FlowLayout(FlowLayout.CENTER,5,30)); dlg.setBackground(Color.white); dlg.add(btn[27]); dlg.add(btn[28]); } static class thread extends Thread{//时间显示线程 public thread(){ thd=new Thread(this); thd.start(); } public void run(){ while(true){ Integer a=new Date().getHours(),b=new Date().getMinutes(),c=new Date().getSeconds(); String aa=new String(""),bb=new String(""),cc=new String(""); if(a<10) aa="0"+a.toString(); else aa=a.toString(); if(b<10) bb="0"+b.toString(); else bb=b.toString(); if(c<10) cc="0"+c.toString(); else cc=c.toString(); time.setText(aa+":"+bb+":"+cc); try{ thd.sleep(100); } catch(InterruptedException ie){ System.out.println(""+ie); } } } } public class WinLis extends WindowAdapter{//WinLis public void windowClosing(WindowEvent e1){ //frm.dispose(); //System.exit(0); dlg.setLocation(200,300); dlg.show(true); } } static class ActLis implements ActionListener{ //ActionListener public void actionPerformed(ActionEvent e2){ Button bt=(Button)e2.getSource(); if(bt==btn[27]){ frm.dispose(); System.exit(0); } else if(bt==btn[28]) dlg.hide(); else if(bt==btn[24]){//"Backspace"键 if(!txt.getText().trim().equals("0")){ if(str.length()!=1){ txt.setText(str.delete(str.length()-1,str.length()).toString()); } else{ txt.setText("0"); str.setLength(0);//str长度清零 } } y=Double.parseDouble(txt.getText().trim()); } else if(bt==btn[25] || bt==btn[26]){txt.setText("0");str.setLength(0);}// "CE"or"C" //else if(bt==btn[0]){}//btn[0]"MC" btn[6]"MR" btn[12]"MS" btn[18]"M+" else if(bt==btn[4]) {// "/" 号 op="/"; x=Double.parseDouble(txt.getText().trim());y=0; str.setLength(0); } else if(bt==btn[5]){// "sqrt"号 x=Double.parseDouble(txt.getText().trim());y=0; if(x<0) txt.setText("invalid"); else txt.setText(""+Math.sqrt(x)); str.setLength(0); } else if(bt==btn[10]){// "*"号 op="*"; x=Double.parseDouble(txt.getText().trim());y=0; str.setLength(0); } else if(bt==btn[11]) {// "%"号 x=Double.parseDouble(txt.getText().trim());y=0; txt.setText(""+x/100); str.setLength(0); } else if(bt==btn[16]){// "-"号 op="-"; x=Double.parseDouble(txt.getText().trim());y=0; str.setLength(0); } else if(bt==btn[17]){// "1/x"号 x=Double.parseDouble(txt.getText().trim());y=0; if(x==0) txt.setText("invalid"); else txt.setText(""+1/x); str.setLength(0); } else if(bt==btn[22]){// "+"号 op="+"; x=Double.parseDouble(txt.getText().trim());y=0; str.setLength(0); } else if(bt==btn[21]){// "." 号 if(txt.getText().trim().indexOf('.')==-1) txt.setText(str.append(".").toString()); else{ txt.setText("invalid"); str.setLength(0); x=0;y=0; } } else if(bt==btn[23]){// "="号 if(y==0 && op=="/") txt.setText("invalid"); else txt.setText(""+calculate()); str.setLength(0); x=Double.parseDouble(txt.getText().trim());y=0;op=""; } else{//按下数字键 txt.setText(str.append(e2.getActionCommand()).toString()); y=Double.parseDouble(txt.getText().trim()); } } public double calculate(){ if(op=="+") return x+y; else if(op=="-") return x-y; else if(op=="*") return x*y; else if(op=="") return y; else{ //if(y==0) {txt.setText("invalid"); return x/y; } } } public static void main(String args[]){ Cal calculator=new Cal(); thread new_thd=new thread(); } }
相关文章推荐
- java简单计算器Gui
- java-简单计算器窗口
- [Java.web]简单计算器
- Java实现的简单计算器
- 利用javabean+jsp写的简单计算器(附加图片)
- 【Java】简单计算器实现
- java实现简单计算器
- JavaWeb_08_jsp_简单计算器(jsp+javaBean模式)
- 简单计算器 java实现hdu1237
- 用java实现的简单计算器
- java 简单计算器
- Java简单计算器
- JavaWeb学习记录(二十)——Model1模式(javaBean+jsp)实现简单计算器案例
- [代码记录]java简单计算器的操作类函数封装
- 大学JAVA实验四 简单计算器、记事本
- java用类和方法的方式写的简单计算器
- java简单计算器
- Java简单计算器
- java实现简单计算器算法--支持浮点数运算
- java小程序——简单计算器