2013-11-25 41 views
0

該程序應該允許用戶通過從三組單選按鈕中選擇一個來「設計」房屋,並顯示最新(每次更改時刷新)的總費用房子在同一個窗口,但我似乎無法得到實際顯示任何東西,但0.0美元或空值,我很確定問題是與我使用我的動作偵聽器的方式。任何有關如何解決這個問題的幫助將非常感激。帶有動作監聽器的單選按鈕

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

回答

1

你需要

messageLabel.setText(total); 

在你actioPerformed()

結束時,你已經改變了totalactioPerformed(),但你以後總設置爲標籤

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); 
+0

阿拜,就是這樣。我仍然存在每個部件不與其他部件相加的成本問題,因爲在成本展示中,只是與最近選擇的單選按鈕相關的成本。 – Pete

+0

看我的編輯。簡單的修復。如果此答案有助於解決您的問題,請接受答案。 –

+0

非常感謝。對不起,我一開始並不接受答案。這是我第一次使用這個網站,我沒有完全意識到適當的禮節。 – Pete