为什么我的按钮没有执行正确的操作?

时间:2017-08-10 07:15:42

标签: java jbutton actionlistener

我创建了一个"计算器"使用GUI。但是当我使用我的输入按钮时,无论我按下哪个操作员,它总是打印出两个数字的乘积。

class Calculator extends JFrame implements ActionListener{
   JTextfield firstN, secondN;
   JButton addButton, subButton, divButton, mulButton, enter;
   JLabel result;

   Calculator(){
      // here I initialized all the components and added buttons/ActionListeners
   }

   public void actionPerformed(ActionEvent e) {
      int first = Integer.parseInt(firstN.getText());
      int second = Integer.parseInt(secondN.getText());
      int value = 0;

      if(e.getSource() == addButton){
          value = first + second;
      }else  if(e.getSource() == subButton){
          value = first - second;
      }else if(e.getSource() == divButton){
          value = first/second;
      }else{
          value = first*second;
      }

      if(e.getSource() == enter)
         result.setText(value + "");
      }

没有输入按钮,计算器工作正常。我尝试了一个do-while循环,但结果却是无限的......

我想我的if / else语句出了问题,但前4个语句中的一个总是被执行,所以最后一个语句也应该可以解决...

2 个答案:

答案 0 :(得分:1)

value变量不应在actionPerformed方法中声明。这样,每次单击按钮时都会重置它。 enter按钮也会重置它。你得到了这两个数字的乘积,因为它是第一个if语句的默认分支。应该只有一个if语句,该值应该是类级别字段而不是局部变量:

class Calculator extends JFrame implements ActionListener{
   JTextfield firstN, secondN;
   JButton addButton, subButton, divButton, mulButton, enter;
   JLabel result;
   int value;
   Calculator(){
      // here I initialized all the components and added buttons/ActionListeners
   }

   public void actionPerformed(ActionEvent e) {
      int first = Integer.parseInt(firstN.getText());
      int second = Integer.parseInt(secondN.getText());


      if(e.getSource() == addButton){
          value = first + second;
      }else  if(e.getSource() == subButton){
          value = first - second;
      }else if(e.getSource() == divButton){
          value = first/second;
      }else if (e.getSource() == mulButton){
          value = first*second;
      }else if(e.getSource() == enter)
         result.setText(value + "");
      }
  }

答案 1 :(得分:0)

自上次阻止 {value = first * second; } 没有if条件,它不仅会在 e.getSource == mulButton 时执行,而且还会在 e.getSource == enter 时执行。< / p>

解决方案可能是用这段代码替换最后一个else语句:

} else if(e.getSource == mulButton) {
    value = first*second;
}