ActionListener和ItemListener未正确实现

时间:2013-12-10 18:14:05

标签: java swing oop actionlistener itemlistener

我的任务是再次修改我的BMI计算器。我以前的代码工作正常,但这一次,我为我的单选按钮添加了一个ItemListener。我需要存储并保存当前所选单选按钮的状态,然后根据其选择状态,“计算”按钮应以“公制”或“英制”执行计算。当我运行代码时,没有语法错误。相反,由于在输入重量和高度并选择我的单选按钮后按下计算按钮时没有任何操作,因此存在逻辑错误。

我在这里创建了一个布尔变量来确定所选的内容:

private Boolean selected = false;  //selected is for metric and imperial
private Boolean Gselected = false;  // Gselected is for gender

这些在我的构造函数之外,并且作为全局变量。

我认为我的问题在于,当我在内部私人课堂中使用它们时:

    private class bmiItemListener implements ItemListener
   {


      public void itemStateChanged(ItemEvent event)
      {


    if (metric.isSelected() && male.isSelected() ) {
                selected = true;
        Gselected = true;
         } 
    else if (imperial.isSelected() && male.isSelected()) {

                selected = false;
        Gselected = true;
     }

    if (metric.isSelected() && female.isSelected() ) {
                selected = true;
        Gselected = false;
         } 
    else if (imperial.isSelected() && female.isSelected()) {

                selected = false;
        Gselected = flase;
     }
   }

这是我的计算按钮的动作监听器:

    private class bmiActionListener implements ActionListener
   {

      public void actionPerformed (ActionEvent event)
      {
         String heightText, weightText, bmiTotal;
         double heightVal, weightVal, bmi;


     heightText = height.getText();
     weightText = weight.getText();


     heightVal = Double.parseDouble (heightText) ;
     weightVal = Double.parseDouble (weightText) ;

    if(selected == flase && Gselected == false)
    {
        bmi=(weightVal*703)/(heightVal*heightVal);
        bmiTotal = String.valueOf(bmi);
        resultLabel.setText(bmi ) ;
    }

    else if(selected == true && Gselected == false)
    {
        bmi=weightVal/(heightVal*heightVal)*10000;
        bmiTotal = String.valueOf(bmi);
        resultLabel.setText(bmi ) ;
    }

    else if(selected == false && Gselected == true)
    {
        bmi=(weightVal*703)/(heightVal*heightVal);
        bmiTotal = String.valueOf(bmi);
        resultLabel.setText(bmi ) ;
    }

    else if(selected == false && Gselected == false)
    {
        bmi=(weightVal*703)/(heightVal*heightVal);
        bmiTotal = String.valueOf(bmi);
        resultLabel.setText(bmi ) ;
    }

       }
}

1 个答案:

答案 0 :(得分:0)

我对ItemListener不是很熟悉,但我建议在你的单选按钮上使用ActionListener。

〔实施例:

JRadioButton male = new JRadioButton("Male");
JRadioButton female = new JRadioButton("Female");

male.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        gselected = true;
        female.setSelected(false); //if you can only select male or female
    }
});

female.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        gselected = true;
        male.setSelected(false); //if you can only select male or female
    }
});

编辑:尚未测试此代码或编码所有按钮按下的情况。只是为了一般的想法