Java 带有动作侦听器的单选按钮
该程序允许用户通过从三组单选按钮中选择“设计”房屋,并显示最新信息(每次更改时刷新)在同一个窗口中显示房子的总成本,但除了0.0美元或空值之外,我似乎无法获得实际显示任何东西的成本,我非常确定问题在于我使用动作监听器的方式。如果您能帮助解决此问题,我们将不胜感激Java 带有动作侦听器的单选按钮,java,swing,user-interface,radio-button,actionlistener,Java,Swing,User Interface,Radio Button,Actionlistener,该程序允许用户通过从三组单选按钮中选择“设计”房屋,并显示最新信息(每次更改时刷新)在同一个窗口中显示房子的总成本,但除了0.0美元或空值之外,我似乎无法获得实际显示任何东西的成本,我非常确定问题在于我使用动作监听器的方式。如果您能帮助解决此问题,我们将不胜感激 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package jmynewhome
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jmynewhome;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
*
* @author Peter
*/
public class JMyNewHome extends JFrame{
private JPanel panel;
private double cost1;
private double cost2;
private double cost3;
private JLabel messageLabel;
private JRadioButton aspen;
private JRadioButton brittany;
private JRadioButton colonial;
private JRadioButton dartmoor;
private ButtonGroup house;
private JRadioButton bedroom2;
private JRadioButton bedroom3;
private JRadioButton bedroom4;
private ButtonGroup bedroom;
private JRadioButton noGarage;
private JRadioButton garage1;
private JRadioButton garage2;
private JRadioButton garage3;
private ButtonGroup garage;
private String total;
public JMyNewHome() {
setTitle("My new home");
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
messageLabel = new JLabel("$"+ total);
buildPanel();
add(panel);
setVisible(true);
}
private void buildPanel()
{
aspen = new JRadioButton("Aspen");
brittany = new JRadioButton("Brittany", true);
colonial = new JRadioButton("Colonial");
dartmoor = new JRadioButton("Dartmoor");
bedroom2 = new JRadioButton("2 bedrooms", true);
bedroom3 = new JRadioButton("3 bedrooms");
bedroom4 = new JRadioButton("4 bedrooms");
noGarage = new JRadioButton("No garage");
garage1 = new JRadioButton("1 car garage");
garage2 = new JRadioButton("2 car garage");
garage3 = new JRadioButton("3 car garage");
house = new ButtonGroup();
bedroom = new ButtonGroup();
garage = new ButtonGroup();
house.add(aspen);
house.add(brittany);
house.add(colonial);
house.add(dartmoor);
bedroom.add(bedroom2);
bedroom.add(bedroom3);
bedroom.add(bedroom4);
garage.add(noGarage);
garage.add(garage1);
garage.add(garage2);
garage.add(garage3);
aspen.addActionListener(new RadioButtonListener());
brittany.addActionListener(new RadioButtonListener());
colonial.addActionListener(new RadioButtonListener());
dartmoor.addActionListener(new RadioButtonListener());
bedroom2.addActionListener(new RadioButtonListener());
bedroom3.addActionListener(new RadioButtonListener());
bedroom4.addActionListener(new RadioButtonListener());
noGarage.addActionListener(new RadioButtonListener());
garage1.addActionListener(new RadioButtonListener());
garage2.addActionListener(new RadioButtonListener());
garage3.addActionListener(new RadioButtonListener());
panel = new JPanel();
panel.add(aspen);
panel.add(brittany);
panel.add(colonial);
panel.add(dartmoor);
panel.add(bedroom2);
panel.add(bedroom3);
panel.add(bedroom4);
panel.add(noGarage);
panel.add(garage1);
panel.add(garage2);
panel.add(garage3);
panel.add(messageLabel);
}
private class RadioButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
total = "";
cost1 = 0.0;
cost2 = 0.0;
cost3 = 0.0;
if (e.getSource() == aspen)
cost1 = 100000;
else if(e.getSource() == brittany)
cost1 = 120000;
else if(e.getSource() == colonial)
cost1 = 180000;
else if(e.getSource() == dartmoor)
cost1 = 250000;
if (e.getSource() == bedroom2)
cost2 = 10500 * 2;
else if(e.getSource() == bedroom3)
cost2 = 10500 * 3;
else if(e.getSource() == bedroom4)
cost2 = 10500 * 4;
if(e.getSource() == noGarage)
cost3 = 0;
else if(e.getSource() == garage1)
cost3 = 7775;
else if(e.getSource() == garage2)
cost3 = 7775 * 2;
else if(e.getSource() == garage3)
cost3 = 7775 * 3;
total = Double.toString(cost1 + cost2 + cost3);
}
}
public static void main(String[] args) {
new JMyNewHome();
}
}
你需要
messageLabel.setText(total);
在actioPerformed()的末尾
您已在actioPerformed()
中更改了total
,但从未将该总数设置为标签
public void actionPerformed(ActionEvent e){
...
...
total = Double.toString(cost1 + cost2 + cost3);
messageLabel.setText("$" + total);
}
编辑:
使用下面的代码,您将重置总计
total = Double.toString(cost1 + cost2 + cost3);
你想要这个
total += Double.toString(cost1 + cost2 + cost3);
你需要
messageLabel.setText(total);
在actioPerformed()的末尾
您已在actioPerformed()
中更改了total
,但从未将该总数设置为标签
public void actionPerformed(ActionEvent e){
...
...
total = Double.toString(cost1 + cost2 + cost3);
messageLabel.setText("$" + total);
}
编辑:
使用下面的代码,您将重置总计
total = Double.toString(cost1 + cost2 + cost3);
你想要这个
total += Double.toString(cost1 + cost2 + cost3);
啊,谢谢,就是这样。我仍然存在每个零件的成本没有与其他零件一起添加的问题,因为在成本显示中,只有与最近选中的单选按钮关联的成本。请参阅我的编辑。简单的修复。如果这个答案有助于解决您的问题,请接受这个答案。谢谢,它非常有效。很抱歉,起初我没有接受答案。这是我第一次使用这个网站,我还没有完全意识到正确的礼仪。啊,谢谢,就是这样。我仍然存在每个零件的成本没有与其他零件一起添加的问题,因为在成本显示中,只有与最近选中的单选按钮关联的成本。请参阅我的编辑。简单的修复。如果这个答案有助于解决您的问题,请接受这个答案。谢谢,它非常有效。很抱歉,起初我没有接受答案。这是我第一次使用这个网站,但我并不完全了解正确的礼仪。