简单的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 

这是工作代码……

 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 

在某个地方你必须跟踪按下了什么按钮。 当事情发生时,你需要在变量中存储一些内容,这样你就可以回忆起这些信息,或者它已经永远消失了。

当有人按下其中一个操作员按钮时,不要让他们输入其他值。 保存运算符符号,然后让它们键入另一个值。 您可以直接使用String operator来获取操作员按钮的文本。 然后,当按下等号按钮时,您必须检查您存储的操作员。 您可以使用if / else if / else链来执行此操作。

因此,在符号的按钮按下事件中,将符号文本存储在变量中,然后在=按钮按下事件中,检查变量中的哪个符号并采取相应的操作。

或者,如果你对枚举感觉足够舒服(看起来你刚刚开始,所以如果你还没有达到这一点,请忽略这一点),你可以有一个符号枚举,让你可以用开关轻松检查符号。

你需要的是计算中缀计算结果的东西,看一下Shunting-Yard算法 。

在维基百科的页面上有一个C ++示例,但在Java中实现它不应该太难。
由于它是计算器的主要function,我建议你不要在本案例中从Web中获取一些codez (除了你想要做的就是构建计算器GUI)。

假设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; } }