我很确定我已经看过大多数与此问题有关的问题,但他们都使用多个文本字段,每个按钮一个侦听器或类似的东西。我试图从一个文本字段获取多个双输入,第一个变量设置为初始文本,第二个变量设置为第二个文本。所以如果有人输入1 + 4,第一个变量设置为1,+清除文本字段,第二个变量设置为4.这是第一次写入,所以可能会有很多不必要的事情。从一个JTextField解析多个双打
编辑:可能在这里不清楚,我想要发生的是用户输入(对于1 + 4),单击按钮1将文本字段设置为1并将第一个变量设置为1,然后单击+按钮,清除文本字段,然后单击4按钮将文本字段设置为4并将第二个变量设置为4,然后单击等号按钮,结果基于操作员单击。它不是作为一个字符串输入的。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class GUICalculator extends JFrame implements ActionListener {
private static final int WIDTH = 300;
private static final int HEIGHT = 300;
private JTextField displayField;
private static final String[] NUMBERS = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "-", "*", "/", "C", "=", "."};
private static final Set<String> OPERATORS = new HashSet<>(Arrays.asList("+", "-", "*", "/", "C", "="));
private double n1, n2, result;
public GUICalculator() {
super("Calculator");
setLayout(new BorderLayout());
setSize(WIDTH, HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
displayField = new JTextField();
displayField.setEditable(false);
add(displayField, BorderLayout.NORTH);
add(buttonPanel);
for (String number : NUMBERS) {
JButton buttons = new JButton(number);
buttons.addActionListener(this);
buttonPanel.add(buttons);
}
}
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
for (String number : NUMBERS) {
if (command.equals(number) && !OPERATORS.contains(command)) {
displayField.setText(displayField.getText() + command);
n1 = Double.parseDouble(displayField.getText());
}
//n2 = Double.parseDouble(displayField.getText());
switch (command) {
case "+":
result = n1 + n2;
displayField.setText("");
case "-":
result = n1 - n2;
displayField.setText("");
case "*":
result = n1 * n2;
displayField.setText("");
case "/":
try {
if (n2 == 0)
throw new DivisionByZeroException();
result = n1/n2;
} catch (DivisionByZeroException f) {
f.getMessage();
displayField.setText("");
break;
}
case "=":
displayField.setText(Double.toString(result));
break;
case "C":
displayField.setText("");
}
}
}
public static void main(String[] args) {
GUICalculator gc = new GUICalculator();
gc.setVisible(true);
}
}
注释行是我想要进去的,但我不知道该把它放在哪里。
请参见[此答案](http://stackoverflow.com/a/7441804/418556)工作源使用['ScriptEngine'](http://docs.oracle.com/javase/8/docs/ api/javax/script/ScriptEngine.html)来评估表达式。 – 2014-10-06 07:36:03