简体   繁体   English

带动作监听器的单选按钮

[英]Radio Button with Action Listener

This program is supposed to allow the user "design" a house by picking from three groups of radio buttons and display the up-to-date (refreshes every time a change is made) total cost of the house in the same window but I can't seem to get the cost to actually display anything but $0.0 or null and I am pretty sure the problem is with the way I am using my action listener. 该程序应该允许用户通过从三组单选按钮中进行选择来“设计”房屋,并在同一窗口中显示房屋的最新总成本(每次进行更改时刷新),但是我可以似乎并没有实际显示除$ 0.0或null以外的任何内容的成本,而且我很确定问题出在我使用动作侦听器的方式上。 Any help on how to fix this would be very appreciated. 任何有关如何解决此问题的帮助将不胜感激。

/*
 * 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();
    }
}

You need 你需要

messageLabel.setText(total);

At the end of your actioPerformed() actioPerformed()的末尾

You've changed the total in the actioPerformed() but you never set that total to the label 您已经在actioPerformed()更改了total ,但从未将总计设置为标签

public void actionPerformed(ActionEvent e){
    ...
    ...

    total = Double.toString(cost1 + cost2 + cost3);

    messageLabel.setText("$" + total);
}

Edit: With the code below, you're resetting total 编辑:使用下面的代码,您将重置总计

total = Double.toString(cost1 + cost2 + cost3);

You want this 你要这个

total += Double.toString(cost1 + cost2 + cost3);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM