Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ActionListener和ItemListener未正确实现_Java_Swing_Oop_Actionlistener_Itemlistener - Fatal编程技术网

Java ActionListener和ItemListener未正确实现

Java ActionListener和ItemListener未正确实现,java,swing,oop,actionlistener,itemlistener,Java,Swing,Oop,Actionlistener,Itemlistener,我的任务再次是修改我的体重指数计算器。我以前的代码工作正常,但这次,我为单选按钮添加了一个ItemListener。我需要存储并保存当前选定单选按钮的状态,然后根据其选定状态,“计算”按钮应以公制或英制进行计算。当我运行代码时,没有语法错误。相反,这是一个逻辑错误,因为当我输入体重和身高并选择单选按钮后按下“计算”按钮时,什么也没做 我在这里创建了一个布尔变量来确定选择了什么: private Boolean selected = false; //selected is for metric

我的任务再次是修改我的体重指数计算器。我以前的代码工作正常,但这次,我为单选按钮添加了一个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 ) ;
    }

       }
}

我不太熟悉ItemListener,但我建议您在单选按钮中使用ActionListener

Exmaple:

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
    }
});

编辑:尚未测试此代码或对所有按键情况进行编码。只是为了大致了解一下

,这是相当多的代码。如果你能发一个帖子,你会得到更好的回复。好的。我会将其分解并指出我认为问题所在的位置。为了更快地获得更好的帮助,请发布一个。是否建议使用操作侦听状态更改项?因为这个方法在我脑海中闪过,但我否认了,也没有检查。@Codex是的,绝对。