用Java编写一个计算器程序

如题所述

第1个回答  2014-06-10
import java.awt.*;
import java.awt.event.*;
public class MyCalculator {
private Frame f;
private TextField tf = new TextField(30);
private long result;
private boolean append=false;
private char operator='=';
private Button[] btn=new Button[15];

public MyCalculator() {
initComponent();
}

private void initComponent() {
f = new Frame("My Calculator V1.0");
f.setLayout(new BorderLayout()); //The frame uses BorderLayout
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});

Panel centerPanel = new Panel();
centerPanel.setLayout(new GridLayout(5, 3)); //The panel uses GridLayout

NumberListener nl=new NumberListener();
OperatorListener ol=new OperatorListener();

btn[10]=new Button("+");
btn[11]=new Button("-");
btn[12]=new Button("*");
btn[13]=new Button("/");
btn[14]=new Button("=");

for (int i=0;i<=9;i++){
btn[i]=new Button(String.valueOf(i));
centerPanel.add(btn[i]);
btn[i].addActionListener(nl);
if (i%2==1){
centerPanel.add(btn[(i+19)/2]);
btn[(i+19)/2].addActionListener(ol);
}
}
f.add(centerPanel, BorderLayout.CENTER);

Panel northPanel = new Panel();

tf.setEditable(false);
northPanel.add(tf);
f.add(northPanel, BorderLayout.NORTH);
}
public void go() {
f.pack();
f.setVisible(true);
}

public static void main(String[] args) {
new MyCalculator().go();
}

/**
*采用成员内部类方式,实现监听器接口,方便访问主类内类内部成员。
*此类负责数字按钮Action事件监听和处理
*/
class NumberListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if (!append) {
tf.setText("");
append=true;
}
String s=tf.getText();
s+=e.getActionCommand();
tf.setText(s);
if (!btn[10].isEnabled()){
for(int i=10;i<=14;i++) btn[i].setEnabled(true);
}
}
}

/**
* 成员内部类,负责操作符按钮的事件处理
*/
class OperatorListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if (!append) return;
for(int i=10;i<=14;i++) btn[i].setEnabled(false);
String s=tf.getText();
long num=Long.parseLong(s);//get the number of textfield
append=false; //set append
switch(operator){
case '+':result+=num;break;
case '-':result-=num;break;
case '*':result*=num;break;
case '/':{
if (num==0) result=0;
else result/=num;
break;
}
case '=':result=num;break;
}
tf.setText(String.valueOf(result));
//set the value of result to textfield
String op=e.getActionCommand();
operator=op.charAt(0); // set operator
}
}
}本回答被提问者采纳
相似回答