1

为了练习,我正在尝试创建一个功能齐全的计算器。我在下面复制了我的代码的 ActionListener 类。我觉得我的这种获取用户输入的方法,将其存储为整数/双精度并不能很好地工作,因为它太基本并且不适用于所有情况。我想知道是否有人可以帮助我找出一种方法来构建我的代码,让用户输入两个数字和一个符号,并基本上创建一个功能齐全的 GUI 计算器。我的问题是从我的 JButton 获取用户输入,以像计算器一样的方式存储为数字(按 1 两次 == 11)并将其用于以后的计算。

我很欣赏这方面的任何建议。

private class TheHandler implements ActionListener{
            public void actionPerformed(ActionEvent event){
                while(equals!=event.getSource())
                    if(one==event.getSource()){
                       result.setText("1");
                       num1=1;
                    }
                    else if(two==event.getSource()){
                       result.setText("2");

                    }
                    else if(three==event.getSource()){
                       result.setText("3");
                    }
                    else if(four==event.getSource()){
                       result.setText("4");
                    }
                    else if(five==event.getSource()){
                       result.setText("5");
                    }
                    else if(six==event.getSource()){
                       result.setText("6");
                    }
                    else if(seven==event.getSource()){
                       result.setText("7");
                    }
                    else if(eight==event.getSource()){
                       result.setText("8");
                    }
                    else if(nine==event.getSource()){
                        result.setText("9");
                    }
                    else if(zero==event.getSource()){
                        result.setText("0");
                    }
                }
            }
4

3 回答 3

3

您应该完全删除while

我建议使用数字变量,例如

long num = 0;
int digit;

每个事件应该只设置数字

 ...
 else if(nine==event.getSource()){
     digit = 9;
 } else if(zero==event.getSource()){
     digit = 0;
 }
...
num = num * 10 + digit;
...
result.setText(Long.toString(num));
于 2012-06-01T13:49:11.347 回答
2

一个类成员变量如何存储显示的当前状态并将其用于设置文本?

private class TheHandler implements ActionListener{
    String display = "";
    public void actionPerformed(ActionEvent event){
        while(equals!=event.getSource()){
            if(one==event.getSource()){
                display=display+"1";

            }
            ..... 
        }
        result.setText(display);
    }
}
于 2012-06-01T13:47:05.317 回答
1

您可以更清楚地将每个按钮与一个数字相关联,如下所示:

private class TheHandler implements ActionListener{
  private Map<Object, String> numbers = new HashMap<Object, String>();
  {
    numbers.put(zero, "0");
    numbers.put(one, "1");
    ...
  }
  public void actionPerformed(ActionEvent event){
    Object source = event.getSource();
    while(equals != source){
      String number = numbers.get(source);
      if (number != null){
        result.setText(number);
      }
    }
  }
}
于 2012-06-01T14:40:03.603 回答