【发布时间】:2014-10-06 06:34:46
【问题描述】:
我很确定我已经查看了与此问题相关的大多数问题,但它们都使用多个文本字段、每个按钮一个侦听器或类似的东西。我试图从一个文本字段中获取多个双重输入,其中第一个变量设置为初始文本,第二个变量设置为第二个文本。所以如果有人输入 1 + 4,第一个变量设置为 1,+ 清除文本字段,第二个变量设置为 4。这是第一次写,所以可能会有很多不必要的东西。
编辑:这里可能不清楚,我想要发生的是用户输入(对于 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);
}
}
注释行是我想进入的,但我不知道放在哪里。
【问题讨论】:
-
请参阅 this answer 了解使用
ScriptEngine评估表达式的工作源。
标签: java swing user-interface calculator