import java.awt.*;
import java.awt.event.*;
public class MyCalculator {
private Frame f;
private TextField tf = new TextField(30); //初始化TextField,用来显示输入的数字或结果
private long result;
private boolean append=false; //用于显示是否进行了计算
private char operator='=';
private Button[] btn=new Button[15]; //定义一个按钮数组,15个按钮
public MyCalculator() { //无参构造方法
initComponent(); //调用初始化组建方法;
}
private void initComponent() { //初始化组建方法
f = new Frame("My Calculator V1.0"); //顶级容器,用来放置按钮等
f.setLayout(new BorderLayout()); //设置Frame为BorderLayout布局管理器
f.addWindowListener(new WindowAdapter() { //设置窗口关闭,用内部类实现的
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
Panel centerPanel = new Panel(); //建立一个面板
centerPanel.setLayout(new GridLayout(5, 3)); //设置面板的的布局管理器为GridLayout
NumberListener nl=new NumberListener(); //调用NumberListener,并实现一个对象nl
OperatorListener ol=new OperatorListener(); //调用OperatorListener,并实现一个对象ol
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); //把面板添加到顶级容器Frame中
Panel northPanel = new Panel(); //建立一个面板
tf.setEditable(false); //设置TextField为不可用
northPanel.add(tf);
f.add(northPanel, BorderLayout.NORTH);
}
public void go() {
f.pack(); //设置Frame的显示为紧缩式
f.setVisible(true);
}
public static void main(String[] args) { //main()函数
new MyCalculator().go();
}
class NumberListener implements ActionListener{ //单击数字按钮产生的事件
public void actionPerformed(ActionEvent e){
if (!append) { //用户进行一个运算append为false,显示结果,则用户再次输入数据是TextField必清零
tf.setText("");
append=true;
}
String s=tf.getText(); //用于显示单击是输出到TextField的内容
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); //TextField中的字符串S转化为Long型的
append=false;
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);
}
}
}
import java.awt.*;
import java.awt.event.*;//包名
public class MyCalculator {//private为私有变量或私有方法
private Frame f;//窗体对象
private TextField tf = new TextField(30); //文本框,大小30
private long result;//
private boolean append = false;
private char operator = '=';
private Button[] btn = new Button[15];//1 5 个按钮
public MyCalculator() {
initComponent();
}
private void initComponent() {
f = new Frame("My Calculator V1.0");//窗体名
f.setLayout(new BorderLayout());//布局,可以省略。因为窗体的默认布局就是BorderLayout
f.addWindowListener(new WindowAdapter() {//窗体适配器实现关闭功能
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
Panel centerPanel = new Panel();
centerPanel.setLayout(new GridLayout(5, 3));//设置布局5*3的表格式
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]);//给10以上的按钮分配内存
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() {//go方法
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new MyCalculator().go();
}
class NumberListener implements ActionListener {//内部类实现NumberListener提供的接口
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);
append = false;
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);
}
}
}
给你注释了一部分。吧你的邮箱给我发过来,我给你发个API,不懂得方法,上边查,这样,你对这个程序了解的会更多。
这程序写的很漂亮。 够清晰。
LZ,你最好自己看明白。 不然以后找工作咋办
这、、这、、现在的学生、、有了源程序还不够、、连注释都要别人来帮忙、、、这、、、