enter code here
package week07_Ben_Calculator;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class AdvancedCalculatorGUI实现了ActionListener {
JFrame frame;
JPanel butPanel;
JTextField res;
JTextField res2;
int oper = 0;
int currentCalc;
double last;
int memory = 0;
public static void main(String[] args) {
// Invocation
EventQueue.invokeLater(new Runnable() {
// Override run
@Override
public void run() {
// Call constructor
new AdvancedCalculatorGUI();
}
});
}
// Create GUI
public AdvancedCalculatorGUI() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Calculator");
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
// New text field
res = new JTextField();
res.setHorizontalAlignment(JTextField.RIGHT);
res.setEditable(false);
frame.add(res, BorderLayout.NORTH);
butPanel = new JPanel();
// 2nd text field
res2 = new JTextField();
res2.setHorizontalAlignment(JTextField.LEFT);
res2.setEditable(false);
frame.add(res2, BorderLayout.SOUTH);
// Create grid
butPanel.setLayout(new GridLayout(6, 3));
frame.add(butPanel, BorderLayout.CENTER);
// Add button
for (int i = 0; i < 10; i++) {
addButton(butPanel, String.valueOf(i));
}
//read button
JButton readButton = new JButton("Read");
readButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
memory = Integer.parseInt(res.getText());
res.setText("");
}
});
//store button
JButton storeButton = new JButton("Store");
storeButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
res.setText(memory+"");
}
});
// Add button +
JButton additionButton = new JButton("+");
//additionButton.setActionCommand("+");
additionButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ev) {
oper = 1;
res2.setText(res2.getText()+"+");}
});
operAct additionAction = new operAct(1);
additionButton.addActionListener(additionAction);
// Subtract button
JButton subtractionButton = new JButton("-");
subtractionButton.setActionCommand("-");
subtractionButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ev) {
oper = 1;
res2.setText(res2.getText()+"-");}
});
operAct subtractionAction = new operAct(2);
subtractionButton.addActionListener(subtractionAction);
// Equal button
JButton eqButton = new JButton("=");
eqButton.setActionCommand("=");
eqButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ev) {
System.out.println(oper);
if (!res.getText().isEmpty()) {
int number = Integer.parseInt(res.getText());
if (oper == 1) {
int value = currentCalc + number;
last = value;
res.setText(Integer.toString(value));
res2.setText(res2.getText()+ "=" + Integer.toString(value));
} else if (oper == 2) {
int value = currentCalc - number;
last = value;
res.setText(Integer.toString(value));
res2.setText(res2.getText()+ "=" + Integer.toString(value));
} else if (oper == 3) {
int value = currentCalc * number;
last = value;
res.setText(Integer.toString(value));
res2.setText(res2.getText()+ "=" + Integer.toString(value));
} else if (oper == 4) {
if (number == 0)
res.setText("ERR");
double value = currentCalc / number;
last = value;
res.setText(Double.toString(value));
res2.setText(res2.getText()+ "=" + Double.toString(value));
}
}
}
});
// multiplication button
JButton mulButton = new JButton("*");
mulButton.setActionCommand("*");
mulButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ev) {
oper = 1;
res2.setText(res2.getText()+"*");}
});
operAct mulAction = new operAct(3);
mulButton.addActionListener(mulAction);
// division button
JButton divButton = new JButton("/");
divButton.setActionCommand("/");
divButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ev) {
oper = 1;
res2.setText(res2.getText()+"/");}
});
operAct divAction = new operAct(4);
divButton.addActionListener(divAction);
butPanel.add(additionButton);
butPanel.add(subtractionButton);
butPanel.add(eqButton);
butPanel.add(mulButton);
butPanel.add(divButton);
butPanel.add(readButton);
butPanel.add(storeButton);
frame.setVisible(true);
}
private void addButton(Container par, String nam) {
JButton b = new JButton(nam);
b.setActionCommand(nam);
b.addActionListener(this);
par.add(b);
}
@Override
public void actionPerformed(ActionEvent ev) {
String act = ev.getActionCommand();
res.setText(act);
System.out.println(ev);
res2.setText(res2.getText() + "" + act);
}
private class operAct implements ActionListener {
private int opt;
public operAct(int oper) {
opt = oper;
}
public void actionPerformed(ActionEvent ev) {
currentCalc = Integer.parseInt(res.getText());
oper = opt;
System.out.println(oper+" "+opt+" "+ currentCalc);
}
}
}
答案 0 :(得分:0)
我已经完成了你的代码;首先,我建议让事情变得更简单。
为简化起见,首先在字符串条目上使用getText()
,然后将它们转换为整数。
对于两个Input TextFields
,明确地将它们保存在各自数据类型的单独变量中,然后通过定义它们的方法执行您需要的任何操作。
您可以使用getAction
命令,而不是每次都覆盖'动作执行的方法'。它将使您的代码更具可读性,并且您可以更轻松地发现错误。