昨天写的,只实现了加减乘除以及取消的功能
o(╯□╰)o,不能发附件额.....
贴代码,仅供参考
我定义了3个类1个接口
1、Calculate接口:定义了计算方法
2、Calculator类 该类实现了Calculate中定义的方法
3、OperatorFactory类:负责方法的调用
4、CalculatorPage类:计算器的主页面
- public class OperatorFactory {
- public static double createOperator (double numA, double numB, char operate) {
- Calculator operation = new Calculator(numA, numB);
- double result = 0;
- switch (operate) {
- case '+':
- result = operation.operatorAdd();
- break;
- case '-':
- result = operation.operatorSub();
- break;
- case '*':
- result = operation.operatorMul();
- break;
- case '/':
- result = operation.operatorDiv();
- break;
- default:
- break;
- }
- return result;
- }
- }
- public class Calculator implements Calculate {
- double numA;
- double numB;
- public Calculator(double numA, double numB) {
- super();
- this.numA = numA;
- this.numB = numB;
- }
- // 实现加法运算
- public double operatorAdd() {
- return numA + numB;
- }
- // 实现除法运算
- public double operatorDiv() {
- return numA / numB;
- }
- // 实现乘法运算
- public double operatorMul() {
- return numA * numB;
- }
- // 实现减法运算
- public double operatorSub() {
- return numA - numB;
- }
- }
- public interface Calculate {
- /**
- * 加法运算
- * @return 返回计算结果
- */
- public double operatorAdd();
- /**
- * 减法运算
- * @return 返回计算结果
- */
- public double operatorSub();
- /**
- * 乘法运算
- * @return 返回计算结果
- */
- public double operatorMul();
- /**
- * 除法运算
- * @return 返回计算结果
- */
- public double operatorDiv();
- }
- public class CalculatorPage extends JFrame {
- private static final long serialVersionUID = 3909257112490231420L;
- public CalculatorPage() {
- super("我的计算器");
- initComponents();
- }
- private void initComponents() {
- initJplMain();
- setBounds(450, 150, WIDTH, HEIGTH);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setResizable(false);
- add(jplMain);
- }
- public void initJplMain() {
- initJplKey();
- jtfRes = new JTextField();
- jplMain = new JPanel();
- GroupLayout layout = new GroupLayout(jplMain);
- jplMain.setLayout(layout);
- layout.setAutoCreateGaps(true);
- layout.setAutoCreateContainerGaps(true);
- SequentialGroup hGroup = layout.createSequentialGroup();
- hGroup.addGroup(layout.createParallelGroup(Alignment.LEADING)
- .addGap(50).addComponent(jtfRes).addComponent(jplKey));
- layout.setHorizontalGroup(hGroup);
- SequentialGroup vGroup = layout.createSequentialGroup();
- vGroup.addGap(50).addGroup(
- layout.createParallelGroup().addComponent(jtfRes));
- vGroup.addGroup(layout.createParallelGroup().addComponent(jplKey))
- .addGap(30);
- layout.setVerticalGroup(vGroup);
- }
- /**
- * 初始化按键界面
- */
- private void initJplKey() {
- jplKey = new JPanel();
- initTbnVec();
- jplKey.setLayout(new GridLayout(5, 4, 3, 3));
- for (int i = 0; i < 20; i++)
- jplKey.add(tbn_Vec.get(i));
- setSize(232, 300);
- }
- /**
- * 初始化按键;并为它们添加事件监听器
- */
- private void initTbnVec() {
- tbn_Vec = new Vector<JButton>();
- for (int i = 0; i < 20; i++)
- tbn_Vec.add(i, new JButton());
- tbn_Vec.get(3).setText("C");
- tbn_Vec.get(4).setText("7");
- tbn_Vec.get(5).setText("8");
- tbn_Vec.get(6).setText("9");
- tbn_Vec.get(7).setText("+");
- tbn_Vec.get(8).setText("4");
- tbn_Vec.get(9).setText("5");
- tbn_Vec.get(10).setText("6");
- tbn_Vec.get(11).setText("-");
- tbn_Vec.get(12).setText("1");
- tbn_Vec.get(13).setText("2");
- tbn_Vec.get(14).setText("3");
- tbn_Vec.get(15).setText("*");
- tbn_Vec.get(16).setText("0");
- tbn_Vec.get(17).setText(".");
- tbn_Vec.get(18).setText("=");
- tbn_Vec.get(19).setText("/");
- for (int i = 3; i < 20; i++) {
- if (i == 4 | i == 5 | i == 6 | i == 8 | i == 9 | i == 10 | i == 12
- | i == 13 | i == 14 | i == 16 | i == 17) {
- tbn_Vec.get(i).addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent evt) {
- digitActionPerformed(evt);
- }
- });
- } else if (i == 7 | i == 11 | i == 15 | i == 19) {
- tbn_Vec.get(i).addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent evt) {
- operatorActionPerformed(evt);
- }
- });
- } else if (i == 18) {
- tbn_Vec.get(i).addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent evt) {
- calculatorActionPerformed(evt);
- }
- });
- } else {
- tbn_Vec.get(i).addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent evt) {
- resetActionPerformed(evt);
- }
- });
- }
- }
- }
- protected void calculatorActionPerformed(ActionEvent evt) {
- if ("" != strNumA & "" != strNum) {
- numA = Double.parseDouble(strNumA);
- numB = Double.parseDouble(strNum);
- }
- if ("+".equals(operatorStr)) {
- operate = '+';
- } else if ("-".equals(operatorStr)) {
- operate = '-';
- } else if ("*".equals(operatorStr)) {
- operate = '*';
- } else {
- operate = '/';
- }
- if (numB == 0 & operate == '/') {
- JOptionPane.showMessageDialog(this, "除数不能为零!");
- return;
- }
- double result = OperatorFactory.createOperator(numA, numB, operate);
- jtfRes.setText(result + "");
- strNumA = "";
- strNum = "";
- numA = result;
- }
- protected void resetActionPerformed(ActionEvent evt) {
- // TODO Auto-generated method stub
- strNum = "";
- jtfRes.setText("");
- numA=0;
- numB=0;
- }
- private void operatorActionPerformed(ActionEvent evt) {
- // TODO Auto-generated method stub
- strNumA = strNum;
- strNum = "";
- operatorStr = ((JButton) evt.getSource()).getText();
- }
- private void digitActionPerformed(ActionEvent evt) {
- // TODO Auto-generated method stub
- strNum += ((JButton) evt.getSource()).getText();
- jtfRes.setText(strNum);
- }
- public static void main(String args[]) {
- java.awt.EventQueue.invokeLater(new Runnable() {
- public void run() {
- new CalculatorPage().setVisible(true);
- }
- });
- }
- private double numA;
- private double numB;
- private String strNum = "";
- private String strNumA;
- private String operatorStr;
- private char operate;//操作符
- private JPanel jplMain;//主界面
- private JPanel jplKey;// 用来显示按键
- private JTextField jtfRes;;// 用来显示结果
- private Vector<JButton> tbn_Vec;//用来存储按键
- private final int WIDTH = 250;//初始化宽
- private final int HEIGTH = 350;//初始化高
- }