2010-11-28 176 views
1

我正在构建一个简单的GUI Java计算器。我有一个问题找到一个包或找出一个方法来做实际的计算。到目前为止,我已经想到,当我进行数学运算时,文本框中的数字会保存在临时位置。简单的GUI Java计算器

然后,当我点击"="按钮,它会做计算,但我不知道如何告诉它采取临时加数学运算和第二个数字,并根据选定的数学计算操作点击,+, -, *, /

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.util.*; 

public class JavaCalculator extends JFrame { 
    private JButton jbtNum1; 
     private JButton jbtNum2; 
     private JButton jbtNum3; 
     private JButton jbtNum4; 
     private JButton jbtNum5; 
     private JButton jbtNum6; 
     private JButton jbtNum7; 
     private JButton jbtNum8; 
     private JButton jbtNum9; 
     private JButton jbtNum0; 
    private JButton jbtEqual; 
     private JButton jbtAdd; 
     private JButton jbtSubtract; 
     private JButton jbtMultiply; 
     private JButton jbtDivide; 
     private JButton jbtSolve; 
     private JButton jbtClear; 
     private double TEMP; 
     private double SolveTEMP; 
    private JTextField jtfResult; 
    String display = ""; 

    public JavaCalculator() { 
     JPanel p1 = new JPanel(); 
     p1.setLayout(new GridLayout(4, 3)); 
     p1.add(jbtNum1 = new JButton("1")); 
     p1.add(jbtNum2 = new JButton("2")); 
     p1.add(jbtNum3 = new JButton("3")); 
     p1.add(jbtNum4 = new JButton("4")); 
     p1.add(jbtNum5 = new JButton("5")); 
     p1.add(jbtNum6 = new JButton("6")); 
     p1.add(jbtNum7 = new JButton("7")); 
     p1.add(jbtNum8 = new JButton("8")); 
     p1.add(jbtNum9 = new JButton("9")); 
     p1.add(jbtNum0 = new JButton("0")); 
     p1.add(jbtClear = new JButton("C")); 


     JPanel p2 = new JPanel(); 
     p2.setLayout(new FlowLayout()); 
     p2.add(jtfResult = new JTextField(20)); 
     jtfResult.setHorizontalAlignment(JTextField.RIGHT); 
     jtfResult.setEditable(false); 

       JPanel p3 = new JPanel(); 
       p3.setLayout(new GridLayout(5, 1)); 
       p3.add(jbtAdd = new JButton("+")); 
       p3.add(jbtSubtract = new JButton("-")); 
       p3.add(jbtMultiply = new JButton("*")); 
       p3.add(jbtDivide = new JButton("/")); 
       p3.add(jbtSolve = new JButton("=")); 

     JPanel p = new JPanel(); 
     p.setLayout(new GridLayout()); 
     p.add(p2, BorderLayout.NORTH); 
     p.add(p1, BorderLayout.SOUTH); 
     p.add(p3, BorderLayout.EAST); 


     add(p); 

     jbtNum1.addActionListener(new ListenToOne()); 
     jbtNum2.addActionListener(new ListenToTwo()); 
     jbtNum3.addActionListener(new ListenToThree()); 
       jbtNum4.addActionListener(new ListenToFour()); 
     jbtNum5.addActionListener(new ListenToFive()); 
     jbtNum6.addActionListener(new ListenToSix()); 
     jbtNum7.addActionListener(new ListenToSeven()); 
     jbtNum8.addActionListener(new ListenToEight()); 
     jbtNum9.addActionListener(new ListenToNine()); 
     jbtNum0.addActionListener(new ListenToZero()); 

     jbtAdd.addActionListener(new ListenToAdd()); 
     jbtSubtract.addActionListener(new ListenToSubtract()); 
     jbtMultiply.addActionListener(new ListenToMultiply()); 
     jbtDivide.addActionListener(new ListenToDivide()); 
     jbtSolve.addActionListener(new ListenToSolve()); 



    } //JavaCaluclator() 

    class ListenToOne implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "1"); 
     } 
    } 
    class ListenToTwo implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "2"); 
     } 
    } 
    class ListenToThree implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "3"); 
     } 
    } 
    class ListenToFour implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "4"); 
     } 
    } 
    class ListenToFive implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "5"); 
     } 
    } 
    class ListenToSix implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "6"); 
     } 
    } 
    class ListenToSeven implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "7"); 
     } 
    } 
    class ListenToEight implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "8"); 
     } 
    } 
    class ListenToNine implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "9"); 
     } 
    } 
    class ListenToZero implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "0"); 
     } 
    } 

     class ListenToAdd implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      TEMP = Double.parseDouble(jtfResult.getText()); 
         jtfResult.setText(""); 

     } 
    } 
    class ListenToSubtract implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "0"); 
     } 
    } 
    class ListenToMultiply implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "0"); 
     } 
    } 
    class ListenToDivide implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "0"); 
     } 
    } 
    class ListenToSolve implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
         SolveTEMP = jtfResult.getText(); 
      jtfResult.setText(TEMP + Double.parseDouble(jtfResult); 
     } 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JavaCalculator calc = new JavaCalculator(); 
     calc.pack(); 
     calc.setLocationRelativeTo(null); 
       calc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     calc.setVisible(true); 
    } 

} //JavaCalculator 
+1

什么是你的问题? – duffymo 2010-11-28 19:57:22

+0

我该如何编程`=`按钮才能进行计算? – 2010-11-28 19:59:17

回答

0

你需要的是一些计算infix notated计算的结果,看看在Shunting-Yard Algorithm

在维基百科页面上的C++中有一个例子,但在Java中实现它不应该太难。
由于这是你计算器的主要功能,所以我建议你不要在这种情况下从网上抓取一些codez(除了你想要做的就是构建计算器GUI)。

1

某处你必须跟踪按下了哪个按钮。当事情发生时,你需要将某些东西存储在一个变量中,以便你可以回忆这些信息,或者它永远消失了。

当某人按下某个操作员按钮时,不要让他们输入另一个值。保存运算符符号,然后让他们输入另一个值。你可以从字面上得到一个String operator,它可以获取操作员按钮的文本。然后,当按下等号按钮时,您必须检查您存储的操作员。你可以用if/else if/else链来做到这一点。

因此,在符号的按钮按下事件后,将符号文本存储在变量中,然后在=按钮按下事件中检查变量中的哪个符号并相应地执行操作。另外,如果你对枚举感觉很舒服(看起来你刚刚开始,所以如果你还没有到那个地步,就忽略这个),你可以有一个枚举符号,让你可以很容易地检查符号与开关。

0

假设string1为您的整个操作

使用MDAS

double result; 
string recurAndCheck(string operation){ 
    if(operation.indexOf("/")){ 
    String leftSide = recurAndCheck(operation.split("/")[0]); 
    string rightSide = recurAndCheck(operation.split("/")[1]); 
    result = Double.parseDouble(leftSide)/Double.parseDouble(rightSide); 

    } else if (..continue w/ *...) { 
    //same as above but change/with * 
    } else if (..continue w/ -) { 
    //change as above but change with - 
    } else if (..continuew with +) { 
    //change with add 
    } else { 
    return; 
    } 
} 
8

这是工作代码...

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.util.*; 

public class JavaCalculator extends JFrame { 

    private JButton jbtNum1; 
    private JButton jbtNum2; 
    private JButton jbtNum3; 
    private JButton jbtNum4; 
    private JButton jbtNum5; 
    private JButton jbtNum6; 
    private JButton jbtNum7; 
    private JButton jbtNum8; 
    private JButton jbtNum9; 
    private JButton jbtNum0; 
    private JButton jbtEqual; 
    private JButton jbtAdd; 
    private JButton jbtSubtract; 
    private JButton jbtMultiply; 
    private JButton jbtDivide; 
    private JButton jbtSolve; 
    private JButton jbtClear; 
    private double TEMP; 
    private double SolveTEMP; 
    private JTextField jtfResult; 

    Boolean addBool = false; 
    Boolean subBool = false; 
    Boolean divBool = false; 
    Boolean mulBool = false; 

    String display = ""; 

    public JavaCalculator() { 

     JPanel p1 = new JPanel(); 
     p1.setLayout(new GridLayout(4, 3)); 
     p1.add(jbtNum1 = new JButton("1")); 
     p1.add(jbtNum2 = new JButton("2")); 
     p1.add(jbtNum3 = new JButton("3")); 
     p1.add(jbtNum4 = new JButton("4")); 
     p1.add(jbtNum5 = new JButton("5")); 
     p1.add(jbtNum6 = new JButton("6")); 
     p1.add(jbtNum7 = new JButton("7")); 
     p1.add(jbtNum8 = new JButton("8")); 
     p1.add(jbtNum9 = new JButton("9")); 
     p1.add(jbtNum0 = new JButton("0")); 
     p1.add(jbtClear = new JButton("C")); 

     JPanel p2 = new JPanel(); 
     p2.setLayout(new FlowLayout()); 
     p2.add(jtfResult = new JTextField(20)); 
     jtfResult.setHorizontalAlignment(JTextField.RIGHT); 
     jtfResult.setEditable(false); 

     JPanel p3 = new JPanel(); 
     p3.setLayout(new GridLayout(5, 1)); 
     p3.add(jbtAdd = new JButton("+")); 
     p3.add(jbtSubtract = new JButton("-")); 
     p3.add(jbtMultiply = new JButton("*")); 
     p3.add(jbtDivide = new JButton("/")); 
     p3.add(jbtSolve = new JButton("=")); 

     JPanel p = new JPanel(); 
     p.setLayout(new GridLayout()); 
     p.add(p2, BorderLayout.NORTH); 
     p.add(p1, BorderLayout.SOUTH); 
     p.add(p3, BorderLayout.EAST); 

     add(p); 

     jbtNum1.addActionListener(new ListenToOne()); 
     jbtNum2.addActionListener(new ListenToTwo()); 
     jbtNum3.addActionListener(new ListenToThree()); 
     jbtNum4.addActionListener(new ListenToFour()); 
     jbtNum5.addActionListener(new ListenToFive()); 
     jbtNum6.addActionListener(new ListenToSix()); 
     jbtNum7.addActionListener(new ListenToSeven()); 
     jbtNum8.addActionListener(new ListenToEight()); 
     jbtNum9.addActionListener(new ListenToNine()); 
     jbtNum0.addActionListener(new ListenToZero()); 

     jbtAdd.addActionListener(new ListenToAdd()); 
     jbtSubtract.addActionListener(new ListenToSubtract()); 
     jbtMultiply.addActionListener(new ListenToMultiply()); 
     jbtDivide.addActionListener(new ListenToDivide()); 
     jbtSolve.addActionListener(new ListenToSolve()); 
     jbtClear.addActionListener(new ListenToClear()); 
    } //JavaCaluclator() 

    class ListenToClear implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      //display = jtfResult.getText(); 
      jtfResult.setText(""); 
      addBool = false; 
      subBool = false; 
      mulBool = false; 
      divBool = false; 

      TEMP = 0; 
      SolveTEMP = 0; 
     } 
    } 

    class ListenToOne implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "1"); 
     } 
    } 

    class ListenToTwo implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "2"); 
     } 
    } 

    class ListenToThree implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "3"); 
     } 
    } 

    class ListenToFour implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "4"); 
     } 
    } 

    class ListenToFive implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "5"); 
     } 
    } 

    class ListenToSix implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "6"); 
     } 
    } 

    class ListenToSeven implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "7"); 
     } 
    } 

    class ListenToEight implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "8"); 
     } 
    } 

    class ListenToNine implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "9"); 
     } 
    } 

    class ListenToZero implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "0"); 
     } 
    } 

    class ListenToAdd implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      TEMP = Double.parseDouble(jtfResult.getText()); 
      jtfResult.setText(""); 
      addBool = true; 
     } 
    } 

    class ListenToSubtract implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      TEMP = Double.parseDouble(jtfResult.getText()); 
      jtfResult.setText(""); 
      subBool = true; 
     } 
    } 

    class ListenToMultiply implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      TEMP = Double.parseDouble(jtfResult.getText()); 
      jtfResult.setText(""); 
      mulBool = true; 
     } 
    } 

    class ListenToDivide implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      TEMP = Double.parseDouble(jtfResult.getText()); 
      jtfResult.setText(""); 
      divBool = true; 
     } 
    } 

    class ListenToSolve implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      SolveTEMP = Double.parseDouble(jtfResult.getText()); 
      if (addBool == true) 
       SolveTEMP = SolveTEMP + TEMP; 
      else if (subBool == true) 
       SolveTEMP = SolveTEMP - TEMP; 
      else if (mulBool == true) 
       SolveTEMP = SolveTEMP * TEMP; 
      else if (divBool == true) 
          SolveTEMP = SolveTEMP/TEMP; 
      jtfResult.setText( Double.toString(SolveTEMP)); 

      addBool = false; 
      subBool = false; 
      mulBool = false; 
      divBool = false; 
     } 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JavaCalculator calc = new JavaCalculator(); 
     calc.pack(); 
     calc.setLocationRelativeTo(null); 
       calc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     calc.setVisible(true); 
    } 

} //JavaCalculator