// 数字监听器 private class NumberAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { JButton jb = (JButton) e.getSource(); // 获取事件源对象 String input = jb.getText(); // 获取事件源对象上的标签 if (start) { // 首次输入 // 一上就".",就什么也不做 if (input.equals(".")) { return; } if (input.equals("退格")) { return; } // 如果是"0.0"的话,就清空 if (display.getText().equals("0.0")) { display.setText(""); } start = false;// 改变是否首次输入的标记值 } else { if (input.equals("退格")) { String s = display.getText(); if (Math.abs(Double.valueOf(display.getText()))>0.0) { s = s.substring(0,s.length()-1); if (s.equals("")) { s = "0.0"; start = true; } display.setText(s); } return; } // 判断显示区域的值里面是否已经有".",如果有,输入的又是".",就什么都不做 if (display.getText().indexOf(".") != -1) { if (input.equals(".")) { return; } } // 判断显示区域的值里面只有"-",输入的又是".",就什么都不做 if (display.getText().equals("-")) { if (input.equals(".")) { return; } } // 判断显示区域的值如果是"0",输入的不是".",就什么也不做 if (display.getText().equals("0")) { if (!input.equals(".")) { return; } } } // 如果我点击了运算符以后,再输入数字的话,就要清空显示区域的值 if (flag) { display.setText(""); flag = false;// 还原初始值,不需要清空 } display.setText(display.getText() + input);// 设置显示区域的值 } } // 运算符监听器 private class CommandAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { JButton jb = (JButton) e.getSource(); // 获取事件源对象 String inputCommand = jb.getText(); // 获取事件源对象上的标签 if (start) {// 首次输入 // 一上就是"-" if (inputCommand.equals("-") || inputCommand.equals("+/-")) { display.setText("-");// 显示区域的内容设置为"-" start = false;// 改变首次输入的标记 } } else { if (inputCommand.equals("+/-")) { double x = Double.parseDouble(display.getText()); x = -x; display.setText(String.valueOf(x)); return; } if (inputCommand.equals("1/x")) { double x = Double.parseDouble(display.getText()); x=1/x; display.setText(String.valueOf(x)); return; } } if (!flag) {// 如果flag=false不需要清空显示区的值,就调用方法计算 calculate(Double.parseDouble(display.getText()));// 保存显示区域的值,并计算 } // 保存你点击的运算符 lastCommand = inputCommand; flag = true;// 因为我这里已经输入过运算符, } } // 计算用的方法 private void calculate(double x) { if (lastCommand.equals("+")) { result += x; } else if (lastCommand.equals("-")) { result -= x; } else if (lastCommand.equals("*")) { result *= x; } else if (lastCommand.equals("/")) { result /= x; } else if (lastCommand.equals("%")) { result %= x; } else if (lastCommand.equals("1/x")) { result =1/result; } else if (lastCommand.equals("+/-")) { result = -result; } else if (lastCommand.equals("=")) { result = x; } display.setText("" + result); }} class MyFrameUitl { public static void init(JFrame jFrame, Dimension frameSize, String title, String iconFileName, boolean resizable) { // 系统工具包 这些代码的含义
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class 简单计算器 extends JFrame implements ActionListener{
JTextField txtNum1,txtNum2,txtNum3;
JComboBox<String> cbOpr;
String opr[] = {"+","-","*","/"};
JButton btnCalc;
public 简单计算器() {
super("简单计算器");
txtNum1 = new JTextField(6);
cbOpr = new JComboBox<String>(opr);
txtNum2 = new JTextField(6);
txtNum3 = new JTextField(6);
btnCalc = new JButton("=");
JPanel northPane = new JPanel(new FlowLayout());
northPane.add(txtNum1);
northPane.add(cbOpr);
northPane.add(txtNum2);
northPane.add(btnCalc);
northPane.add(txtNum3);
txtNum3.setEnabled(false);
add(northPane);
btnCalc.addActionListener(this);
this.pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
@Override
public void actionPerformed(ActionEvent e) {
try {
double num1 = Double.parseDouble(txtNum1.getText());
double num2 = Double.parseDouble(txtNum2.getText());
String line = num1 + "";
int index = cbOpr.getSelectedIndex();
switch(index) {
case 0:
txtNum3.setText((num1+num2)+"");
line+= "+";
break;
case 1:
txtNum3.setText((num1-num2)+"");
line+= "-";
break;
case 2:
txtNum3.setText((num1*num2)+"");
line+= "*";
break;
case 3:
txtNum3.setText((num1/num2)+"");
line+= "/";
break;
}
line+= num2 + "=" + txtNum3.getText();
//保存到文件
BufferedWriter br = new BufferedWriter(new FileWriter("d:\\calc.txt",true));
br.write(line);
br.newLine();
br.close();
}catch(Exception ex){
System.out.println("出错了"+ex.getMessage());
}
}
public static void main(String[] args) {
new 简单计算器();
}
}