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