?? calculation.java
字號:
import java.awt.*;
import java.awt.event.*;
public class Calculation extends WindowAdapter implements ActionListener {
double dResult=0;
double dNowInput=0;
double dMemory;
int n=0; //記載小數位數
int nOperation=1; // 記錄運算符類型
int nBitsNum=0; //記錄總共輸入的位數
boolean alreadyHaveDot=false; //已經有小數點?
boolean keyAvailable=true;
boolean alreadyClickedEqueal=false; //是否按下過"="?
boolean isTempNowInput=false; //是否在計算出結果后直接按運算符將結果賦給了當前輸入值?
Frame f;
Panel p1,p2,p3,p4,p5,p6;
TextField tf1,tf2;
Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0;
Button bDiv,bSqrt,bMulti,bMinus,bPercent,bPlus,bReciprocal,bEqual,bDot,bNegative;
Button bBackspace,bCE,bC,bMR,bMS,bMC,bM;
public void display() {
f=new Frame(" calculation");
f.setSize(280,240);
f.setLocation(200,200);
f.setBackground(Color.LIGHT_GRAY);
f.setResizable(false);
f.setLayout(new BorderLayout(1,1));
p1=new Panel(new GridLayout(1,3,5,5)); //用于存放backspace,ce,c三鍵
p2=new Panel(new GridLayout(4,5,5,5)); //用于存放數字區及附近共20鍵, 此處間隙設置可能不合理,以后調整
p3=new Panel(new GridLayout(5,1,5,5)); //用于存放MC,MR,MS,M+鍵及顯示M狀態文本框,此處間隙設置可能不合理,以后調整
p4=new Panel(new FlowLayout()); //用于存放p1,p2
p5=new Panel(new FlowLayout());
p6=new Panel(new FlowLayout());
p4.add(p1);
p4.add(p2);
tf1=new TextField(35); //存放顯示區
tf1.setText(" ");
tf1.setEditable(false);
p5.add(tf1);
f.add(p5,BorderLayout.NORTH);
f.add(p4,BorderLayout.CENTER);
f.add(p3,BorderLayout.WEST);
b1=new Button("1");
b2=new Button("2");
b3=new Button("3");
b4=new Button("4");
b5=new Button("5");
b6=new Button("6");
b7=new Button("7");
b8=new Button("8");
b9=new Button("9");
b0=new Button("0");
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b0.addActionListener(this);
bDiv=new Button("/");
bSqrt=new Button("sqrt");
bMulti=new Button("*");
bMinus=new Button("-");
bPercent=new Button("%");
bPlus=new Button("+");
bReciprocal=new Button("1/x");
bEqual=new Button("=");
bDot=new Button(".");
bNegative=new Button("+/-");
bDiv.addActionListener(this);
bSqrt.addActionListener(this);
bMulti.addActionListener(this);
bMinus.addActionListener(this);
bPercent.addActionListener(this);
bPlus.addActionListener(this);
bReciprocal.addActionListener(this);
bEqual.addActionListener(this);
bDot.addActionListener(this);
bNegative.addActionListener(this);
p2.add(b7);
p2.add(b8);
p2.add(b9);
p2.add(bDiv);
p2.add(bSqrt);
p2.add(b4);
p2.add(b5);
p2.add(b6);
p2.add(bMulti);
p2.add(bPercent);
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(bMinus);
p2.add(bReciprocal);
p2.add(b0);
p2.add(bNegative);
p2.add(bDot);
p2.add(bPlus);
p2.add(bEqual);
bBackspace=new Button("Backspace");
bCE=new Button("CE");
bC=new Button("C");
bBackspace.addActionListener(this);
bCE.addActionListener(this);
bC.addActionListener(this);
p1.add(bBackspace);
p1.add(bCE);
p1.add(bC);
tf2=new TextField(2);
tf2.setEnabled(false);
tf2.setBackground(Color.LIGHT_GRAY);
bMC=new Button("MC");
bMR=new Button("MR");
bMS=new Button("MS");
bM=new Button("M+");
bMC.addActionListener(this);
bMR.addActionListener(this);
bMS.addActionListener(this);
bM.addActionListener(this);
p6.add(tf2);
p3.add(p6);
p3.add(bMC);
p3.add(bMR);
p3.add(bMS);
p3.add(bM);
f.setVisible(true);
f.addWindowListener(this);
}
public void actionPerformed(ActionEvent e) {
//key 0 to 9
if(this.keyAvailable && e.getActionCommand().length()==1 && e.getActionCommand().compareTo("0")>=0 && e.getActionCommand().compareTo("9")<=0) {
if(this.isTempNowInput) {
this.dNowInput=0;
this.isTempNowInput=false;
}
this.nBitsNum++;
if(this.alreadyHaveDot==false)
this.dNowInput=this.dNowInput*10+Double.parseDouble(e.getActionCommand());
else {
double temp=Double.parseDouble(e.getActionCommand());
for(int i=this.n;i<0;i++) {
temp*=0.1;
}
this.dNowInput+=temp;
this.n--;
}
this.tf1.setText(Double.toString(this.dNowInput));
}
// key dot
if(this.keyAvailable && e.getActionCommand()==".") {
if(this.alreadyHaveDot==false) {
this.nBitsNum++;
this.alreadyHaveDot=true;
this.n=-1;
}
}
//key "+","-","*","/"
if(this.keyAvailable && e.getActionCommand()=="+" || e.getActionCommand()=="-" || e.getActionCommand()=="*" || e.getActionCommand()=="/") {
if(this.alreadyClickedEqueal) {
this.dNowInput=this.dResult;
this.isTempNowInput=true;
}
else {
switch(this.nOperation) {
case 1: this.dResult+=this.dNowInput; break;
case 2: this.dResult-=this.dNowInput; break;
case 3: this.dResult*=this.dNowInput; break;
case 4: {
if(this.dNowInput==0) {
tf1.setText("除數不能為零");
this.keyAvailable=false;
}
else
this.dResult=this.dResult/this.dNowInput;
}
}
if(this.keyAvailable)
tf1.setText(Double.toString(this.dResult));
this.dNowInput=0;
}
if(e.getActionCommand()=="+") {
this.nOperation=1;
}
if(e.getActionCommand()=="-") {
this.nOperation=2;
}
if(e.getActionCommand()=="*") {
this.nOperation=3;
}
if(e.getActionCommand()=="/") {
this.nOperation=4;
}
this.nBitsNum=0;
this.alreadyClickedEqueal=false;
}
// key "+/-"
if(this.keyAvailable && e.getActionCommand()=="+/-") {
this.dNowInput=0-this.dNowInput;
tf1.setText(Double.toString(this.dNowInput));
}
// key "C"
if(e.getActionCommand()=="C") {
this.nBitsNum=0;
this.dResult=0;
this.dNowInput=0;
this.alreadyHaveDot=false;
this.n=0;
this.nOperation=1;
this.keyAvailable=true;
this.alreadyClickedEqueal=false;
tf1.setText("0.");
}
// key "CE"
if(e.getActionCommand()=="CE") {
this.nBitsNum=0;
this.dNowInput=0;
this.alreadyHaveDot=false;
this.n=0;
this.nOperation=1;
this.keyAvailable=true;
tf1.setText("0.");
}
// key "sqrt"
if(this.keyAvailable && e.getActionCommand()=="sqrt") {
if(this.alreadyClickedEqueal) {
if(this.dResult>=0) {
this.dResult=Math.sqrt(this.dResult);
tf1.setText(Double.toString(this.dResult));
}
else {
tf1.setText("函數輸入無效");
this.keyAvailable=false;
}
}
else {
if(this.dNowInput>=0) {
this.dNowInput=Math.sqrt(this.dNowInput);
tf1.setText(Double.toString(this.dNowInput));
}
else {
tf1.setText("函數輸入無效");
this.keyAvailable=false;
}
}
}
// key "1/x"
if(this.keyAvailable && e.getActionCommand()=="1/x") {
if(this.dNowInput==0) {
tf1.setText("除數不能為零");
this.keyAvailable=false;
}
else {
this.dNowInput=1/this.dNowInput;
tf1.setText(Double.toString(this.dNowInput));
}
}
// key "="
if(this.keyAvailable && e.getActionCommand()=="=") {
this.alreadyClickedEqueal=true;
switch(this.nOperation) {
case 1: this.dResult+=this.dNowInput; break;
case 2: this.dResult-=this.dNowInput; break;
case 3: this.dResult*=this.dNowInput; break;
case 4: {
if(this.dNowInput==0) {
tf1.setText("除數不能為零");
this.keyAvailable=false;
}
else this.dResult=this.dResult/this.dNowInput;
}
}
if(this.keyAvailable)
tf1.setText(Double.toString(this.dResult));
}
// key "MS"
if(this.keyAvailable && e.getActionCommand()=="MS") {
this.dMemory=this.dNowInput;
if(this.dMemory!=0)
tf2.setText("M");
}
// key "MC"
if(this.keyAvailable && e.getActionCommand()=="MC") {
this.dMemory=0;
tf2.setText("");
}
// key "MR"
if(this.keyAvailable && e.getActionCommand()=="MR") {
this.dNowInput=this.dMemory;
tf1.setText(Double.toString(this.dNowInput));
}
// key "M+"
if(this.keyAvailable && e.getActionCommand()=="M+") {
this.dMemory+=this.dNowInput;
if(this.dMemory!=0)
tf2.setText("M");
else
tf2.setText("");
}
// key "%"
if(this.keyAvailable && e.getActionCommand()=="%") {
this.dNowInput=(this.dResult*this.dNowInput)/100;
tf1.setText(Double.toString(this.dNowInput));
}
// key "Backspace"
if(this.keyAvailable && e.getActionCommand()=="Backspace") {
if(!this.alreadyClickedEqueal) {
if(this.dNowInput!=0) {
if(this.alreadyHaveDot) {
if(this.n==-1) {
this.alreadyHaveDot=false;
this.n=0;
}
else {
String str,str1;
str=tf1.getText();
str1=str.substring(0,this.nBitsNum-1);
this.nBitsNum--;
this.n++;
this.dNowInput=Double.parseDouble(str1);
tf1.setText(Double.toString(this.dNowInput));
}
}
else {
int temp;
temp=(int)(this.dNowInput/10);
this.dNowInput=(double)temp;
tf1.setText(Double.toString(this.dNowInput));
}
}
}
}
}
public static void main(String args[]) {
Calculation cal=new Calculation();
cal.display();
}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -