我完成了我的计算器,感谢在座的人帮助了我。我在这里做了什么:
import java.awt.*;
import java.awt.event.*;
public class SimpleCalculator implements ActionListener
{
double value1=0,value2=0,result=0;
static String command=null;
int counter=0;
// containers
private Frame f;
private Panel p1, p2, p3, p4,p5,p6;
// components
private Label l1, l2, l3;
static private TextField tf1;
private Button bAdd, bSub, bMul, bDiv, bClear,b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bEqual;
private static void value(String num)
{
if((tf1.getText()).equals("0"))
tf1.setText(num);
else
tf1.setText(tf1.getText()+num);
}
public SimpleCalculator()
{
f = new Frame("My First GUI App");
p1 = new Panel();
p2 = new Panel();
p3 = new Panel();
p4 = new Panel();
p5 = new Panel();
p6 = new Panel();
tf1 = new TextField(15);
b1 = new Button("1");
b2 = new Button("2");
b3 = new Button("3");
b4 = new Button("4");
b5 = new Button("5");
b6 = new Button("6");
b7 = new Button("7");
b8 = new Button("8");
b9 = new Button("9");
b0 = new Button("0");
bAdd = new Button("+");
bSub = new Button("-");
bMul = new Button("*");
bDiv = new Button("/");
bClear = new Button("C");
bEqual = new Button("=");
}
public void launchFrame()
{
// use default layout manager of the Panel (FlowLayout)
p1.add(tf1);
p2.add(b1);
p2.add(b2);
p2.add(b3);
p3.add(b4);
p3.add(b5);
p3.add(b6);
p4.add(b7);
p4.add(b8);
p4.add(b9);
p5.add(b0);
p6.add(bAdd);
p6.add(bSub);
p6.add(bMul);
p6.add(bDiv);
p6.add(bClear);
p6.add(bEqual);
// change the layout manager of the Frame,
// use GridLayout(4, 1)
f.setLayout(new GridLayout(6, 1));
f.add(p1);
f.add(p2);
f.add(p3);
f.add(p4);
f.add(p5);
f.add(p6);
f.pack();
f.setVisible(true);
// register event handlers
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b0.addActionListener(this);
bEqual.addActionListener(this);
bAdd.addActionListener(this);
bSub.addActionListener(this);
bMul.addActionListener(this);
bDiv.addActionListener(this);
bClear.addActionListener(this);
f.addWindowListener(new MyCloseButtonHandler());
}
// override the actionPerformed method
public void actionPerformed(ActionEvent ae)
{
Object source = ae.getSource();
if (source == b1)
value("1");
else if (source == b2)
value("2");
else if (source == b3)
value("3");
else if (source == b4)
value("4");
else if (source == b5)
value("5");
else if (source == b6)
value("6");
else if (source == b7)
value("7");
else if (source == b8)
value("8");
else if (source == b9)
value("9");
else if (source == b0)
value("0");
else if(source== bAdd){
value1=Double.parseDouble(tf1.getText());
command="+";
tf1.setText("");
}
else if(source==bSub){
value1=Double.parseDouble(tf1.getText());
command="-";
tf1.setText("");
}
else if(source==bDiv){
value1=Double.parseDouble(tf1.getText());
command="/";
tf1.setText("");
}
else if(source == bMul){
value1=Double.parseDouble(tf1.getText());
command="*";
tf1.setText("");
}
else if(source ==bClear)
tf1.setText("0");
else if(source==bEqual){
value2=Double.parseDouble(tf1.getText());
if(command.equals("+"))
result=value1+value2;
else if(command.equals("-"))
result=value1-value2;
else if(command.equals("*"))
result=value1*value2;
else if(command.equals("/"))
result=value1/value2;
command="=";
tf1.setText(""+result);
}
}
private class MyCloseButtonHandler extends WindowAdapter
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
}
public static void main(String args[])
{
double value1=0;
SimpleCalculator sc = new SimpleCalculator();
sc.launchFrame();
}
}
问题是他们无法连续执行操作,例如1 + 2 + 3,我每次按下操作时都尝试添加值,但它输出错误。
答案 0 :(得分:1)
我会为您的计算器使用Java的内置Javascript解析器。
答案 1 :(得分:0)
您只存储两个值(value1和value2),因此您只能使用这两个值进行数学运算。想一想如何存储更多价值观。
答案 2 :(得分:0)
为什么不使用像jep这样的工具来解析表达式,除非你需要手工编写代码(比如学校/大学项目)。 无论哪种方式都没有看到存在的解决方案。
答案 3 :(得分:0)
如何显示前两个数字的结果(即结果,哪个有效),然后当它们点击另一个操作数时,您将value1 = result
和value2
作为下一个数字。然后,一旦他们再次达到等于,你得到1+2+3
。然后,您可以实现一个清除按钮来设置result = 0
。