import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import Java.awt.event.WindowEvent;
import javax.swing.JTextFIEld;import Java.awt.Color;
public class createFrame{ Frame f; JTextFIEld text,text2; Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17, b18,b19,b20,b21,b22,b23,b24,b25,b26,b27; double op1,op2,op2x,op3;//運算的三個數:op1,op2是運算數,op3是運算結果 char op=0,opx=0,opp=0;//運算操作符 boolean b=false;//我按過0鍵了,下次該按.了 boolean c=false;//按過運算符了,下次按數字時該清屏顯示 boolean firstdeng=true;//第一次做=
double mjia=0;
public static void main(String[] args) { createFrame cf=new createFrame(); cf.createWindow(); } public void createWindow() { f = new Frame("calculator"); f.setBackground(Color.LIGHT_GRAY); // 增加關閉事件的監聽器 this.shutwindow(f);
text=new JTextField(); text.setHorizontalAlignment(JTextField.RIGHT); text.setSize(250,22); text.setLocation(5,25); text.setEditable(false); text.setBackground(Color.WHITE); text.setText("0."); text2=new JTextField(); text2.setHorizontalAlignment(JTextFIEld.CENTER); text2.setSize(37,22); text2.setLocation(5,50); text2.setEditable(false); text2.setText(""); text2.setBackground(Color.LIGHT_GRAY); b1 = new Button("BackSpace"); b1.setSize(70,22); b1.setLocation(52,50); b2 = new Button("CE"); b2.setSize(60,22); b2.setLocation(128,50); b3 = new Button("C"); b3.setSize(60,22); b3.setLocation(194,50); b4 = new Button("MC"); b4.setSize(37,22); b4.setLocation(5,75); b5 = new Button("7"); b5.setSize(37,22); b5.setLocation(50,75); b6 = new Button("8"); b6.setSize(37,22); b6.setLocation(93,75); b7 = new Button("9"); b7.setSize(37,22); b7.setLocation(136,75); b8 = new Button("/"); b8.setSize(37,22); b8.setLocation(179,75); b9 = new Button("sqrt"); b9.setSize(37,22); b9.setLocation(218,75); b10 = new Button("MR"); b10.setSize(37,22); b10.setLocation(5,100); b11 = new Button("4"); b11.setSize(37,22); b11.setLocation(50,100); b12 = new Button("5"); b12.setSize(37,22); b12.setLocation(93,100); b13 = new Button("6"); b13.setSize(37,22); b13.setLocation(136,100); b14 = new Button("*"); b14.setSize(37,22); b14.setLocation(179,100); b15 = new Button("%"); b15.setSize(37,22); b15.setLocation(218,100); b16 = new Button("MS"); b16.setSize(37,22); b16.setLocation(5,125); b17 = new Button("1"); b17.setSize(37,22); b17.setLocation(50,125); b18 = new Button("2"); b18.setSize(37,22); b18.setLocation(93,125); b19 = new Button("3"); b19.setSize(37,22); b19.setLocation(136,125); b20 = new Button("-"); b20.setSize(37,22); b20.setLocation(179,125); b21 = new Button("1/x"); b21.setSize(37,22); b21.setLocation(218,125); b22 = new Button("M+"); b22.setSize(37,22); b22.setLocation(5,150); b23 = new Button("0"); b23.setSize(37,22); b23.setLocation(50,150); b24 = new Button("+/-"); b24.setSize(37,22); b24.setLocation(93,150); b25 = new Button("."); b25.setSize(37,22); b25.setLocation(136,150); b26 = new Button("+"); b26.setSize(37,22); b26.setLocation(179,150); b27 = new Button("="); b27.setSize(37,22); b27.setLocation(218,150); f.setLayout(null);
f.add(text); f.add(text2); b1.addActionListener(new ButtonHandler()); b2.addActionListener(new ButtonHandler()); b3.addActionListener(new ButtonHandler()); b4.addActionListener(new ButtonHandler()); b5.addActionListener(new ButtonHandler()); b6.addActionListener(new ButtonHandler()); b7.addActionListener(new ButtonHandler()); b8.addActionListener(new ButtonHandler()); b9.addActionListener(new ButtonHandler()); b10.addActionListener(new ButtonHandler()); b11.addActionListener(new ButtonHandler()); b12.addActionListener(new ButtonHandler()); b13.addActionListener(new ButtonHandler()); b14.addActionListener(new ButtonHandler()); b15.addActionListener(new ButtonHandler()); b16.addActionListener(new ButtonHandler()); b17.addActionListener(new ButtonHandler()); b18.addActionListener(new ButtonHandler()); b19.addActionListener(new ButtonHandler()); b20.addActionListener(new ButtonHandler()); b21.addActionListener(new ButtonHandler()); b22.addActionListener(new ButtonHandler()); b23.addActionListener(new ButtonHandler()); b24.addActionListener(new ButtonHandler()); b25.addActionListener(new ButtonHandler()); b26.addActionListener(new ButtonHandler()); b27.addActionListener(new ButtonHandler());
f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.add(b6); f.add(b7); f.add(b8); f.add(b9); f.add(b10); f.add(b11); f.add(b12); f.add(b13); f.add(b14); f.add(b15); f.add(b16); f.add(b17); f.add(b18); f.add(b19); f.add(b20); f.add(b21); f.add(b22); f.add(b23); f.add(b24); f.add(b25); f.add(b26); f.add(b27); f.setResizable(false); f.setSize(260,180); //窗口居中顯示 this.centershow(260,180,f); f.setVisible(true); } public void centershow(int x,int y,Frame f) { //窗口居中顯示 Toolkit tk=Toolkit.getDefaultToolkit(); Dimension d=tk.getScreenSize(); int screenHeight=d.height; int screenWidth=d.width; f.setLocation((screenWidth-x)/2,(screenHeight-y)/2); } public void shutwindow(Frame f) { //Add a listener for the close event f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent evt) { // 退出程序 System.exit(0); } }); } public double getCurrentNum()//得到當前文本框內數字 { return 1; } //四則運算 public double calculateNow(double op1,char op,double op2) { double op1b=0.0; switch(op) { case '+': op1b=op1+op2; break; case '-': op1b=op1-op2; break; case '*': op1b=op1*op2; break; case '/': if(op2==0.0) op1b=op1; else op1b=op1/op2; break; case '%': if(op2==0.0) op1b=op1; else op1b=op1%op2; break; case 0: op1b=op2; break; } return op1b; } class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("Button's lable is :" + e.getActionCommand()+"||" +createFrame.this.op1 +createFrame.this.op +createFrame.this.op2 +"=" +createFrame.this.op3); String command=e.getActionCommand(); String currentText=text.getText(); if(currentText.equals("函數輸入無效.") || currentText.equals("除數不能為零.")) { currentText="0."; text.setText(currentText); } if(command=="BackSpace") { if(currentText.length()>1) currentText=currentText.substring(0,currentText.length()-1); else if(currentText.length()<=1) { currentText="0."; } text.setText(currentText); } if(command=="CE") { text.setText("0."); op2=0.0; //return; } if(command=="C") { text.setText("0."); op3=0.0; op1=0.0; op2=0.0; op2x=0.0; op=0; opx=0; opp=0; firstdeng=true; b=false; c=false; } if(command=="0") { if(text.getText().equals("0.")) { text.setText("0."); b=true; } else text.setText(currentText+"0"); } if(command=="1") { if(c) { c=false; text.setText("1"); return; } if((text.getText().equals("0.") || text.getText().equals("0")) & !b) text.setText("1"); else text.setText(currentText+"1"); } if(command=="2") { if(c) { text.setText("2"); c=false; return; } if((text.getText().equals("0.") || text.getText().equals("0")) & !b) text.setText("2"); else text.setText(currentText+"2"); //return; } if(command=="3") { if(c) { c=false; text.setText("3"); return; } if((text.getText().equals("0.") || text.getText().equals("0")) & !b) text.setText("3"); else text.setText(currentText+"3"); //return; } if(command=="4") { if(c) { c=false; text.setText("4"); return; } if((text.getText().equals("0.") || text.getText().equals("0")) & !b) text.setText("4"); else text.setText(currentText+"4"); //return; } if(command=="5") { if(c) { c=false; text.setText("5"); return; } if((text.getText().equals("0.") || text.getText().equals("0")) & !b) text.setText("5"); else text.setText(currentText+"5"); //return; } if(command=="6") { if(c) { c=false; text.setText("6"); return; } if((text.getText().equals("0.") || text.getText().equals("0")) & !b) text.setText("6"); else text.setText(currentText+"6"); //return; } if(command=="7") { if(c) { c=false; text.setText("7"); return; } if((text.getText().equals("0.") || text.getText().equals("0")) & !b) text.setText("7"); else text.setText(currentText+"7"); //return; } if(command=="8") { if(c) { c=false; text.setText("8"); return; } if((text.getText().equals("0.") || text.getText().equals("0")) & !b) text.setText("8"); else text.setText(currentText+"8"); //return; } if(command=="9") { if(c) { c=false; text.setText("9"); return; } if((text.getText().equals("0.") || text.getText().equals("0")) & !b) text.setText("9"); else text.setText(currentText+"9"); } if(command=="/") { op2=Double.valueOf(text.getText()).doubleValue(); if(opp!='=') { op1=calculateNow(op1,op,op2); opp='/'; } op='/'; opx='/'; text.setText(String.valueOf(op1)); c=true; //b=false; firstdeng=true;
} if(command=="*") { op2=Double.valueOf(text.getText()).doubleValue(); if(opp!='=') { op1=calculateNow(op1,op,op2); opp='*'; } op='*'; opx='*'; text.setText(String.valueOf(op1)); c=true; firstdeng=true; } if(command=="-") { op2=Double.valueOf(text.getText()).doubleValue(); if(opp!='=') { op1=calculateNow(op1,op,op2); opp='-'; } op='-'; opx='-'; text.setText(String.valueOf(op1)); c=true; firstdeng=true; } if(command=="+") { op2=Double.valueOf(text.getText()).doubleValue(); if(opp!='=') { op1=calculateNow(op1,op,op2); opp='+'; } op='+'; opx='+'; text.setText(String.valueOf(op1)); c=true; firstdeng=true; } if(command==".") { if(text.getText().indexOf('.')>1) return; else if(text.getText().indexOf('.')==-1) { text.setText(currentText+"."); b=true; } else if(text.getText().indexOf('.')==1) b=true; }
if(command=="+/-") { if(Double.valueOf(text.getText()).doubleValue()!=0) { double d=-Double.valueOf(text.getText()).doubleValue(); text.setText(String.valueOf(d)); op2=d; op2x=d; } } if(command=="%") { op2=Double.valueOf(text.getText()).doubleValue(); if(op1!=0 & op2!=0) { double temp=op1*op2; temp=temp/100; text.setText(String.valueOf(temp)); } } if(command=="sqrt") { double in=Double.valueOf(text.getText()).doubleValue(); if(in<0) text.setText("函數輸入無效."); else { double sd=Math.sqrt(in); text.setText(String.valueOf(sd)); op2=sd; op2x=sd; }
} if(command=="1/x") { double in=Double.valueOf(text.getText()).doubleValue(); if(in==0) text.setText("除數不能為零."); else { double sd=1/in; text.setText(String.valueOf(sd)); op2=sd; op2x=sd; } } if(command=="=") { op2=Double.valueOf(text.getText()).doubleValue(); System.out.println("=========="+op2); if(firstdeng) { op2x=op2; firstdeng=false; } op1=calculateNow(op1,op,op2x); opp='='; text.setText(String.valueOf(op1)); } if(command=="MC") { mjia=0; text2.setText(""); } if(command=="MR") { text.setText(String.valueOf(mjia)); } if(command=="MS") { mjia=Double.valueOf(text.getText()).doubleValue(); text2.setText("M"); } if(command=="M+") { mjia=mjia+Double.valueOf(text.getText()).doubleValue(); } }
}}