2012-03-01 11 views
3

プログラムがコンパイルされて実行されますが、ここに問題があります。チェックボックスは各アイテムごとに設定されていますが、チェックされているアイテムの合計ではなく、アイテムのすべてではありません。代わりに、チェックされているかどうかにかかわらず、すべてのアイテムを合計します。Java-チェックボックスがオンになっているかどうかを確認する

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JCheckBox; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import java.awt.GridLayout; 
import java.text.*; 

public class StudentShopping extends JFrame 
{ 
    public static void main(String[] args) { 

     JFrame frame = new JFrame(); 

     frame.setSize(550, 400); //Sets size of the window 
     frame.setTitle("Student Shopping");//Adds title to the GUI 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JCheckBox ClothingCheckBox = new JCheckBox(); 
     JLabel Clothinglbl = new JLabel("Clothing"); 
     final JTextField ClothingField = new JTextField(3); 
     ClothingField.setText("0"); 

     JCheckBox BooksCheckBox = new JCheckBox(); 
     JLabel Bookslbl = new JLabel("Books"); 
     final JTextField BooksField = new JTextField(3); 
     BooksField.setText("0"); 

     JCheckBox SuppliesCheckBox = new JCheckBox(); 
     JLabel Supplieslbl = new JLabel("Supplies"); 
     final JTextField SuppliesField = new JTextField(3); 
     SuppliesField.setText("0"); 

     JCheckBox MealPlanCheckBox = new JCheckBox(); 
     JLabel MealPlanlbl = new JLabel("MealPlan"); 
     final JTextField MealPlanField = new JTextField(3); 
     MealPlanField.setText("0"); 

     JCheckBox InternetAccessCheckBox = new JCheckBox(); 
     JLabel InternetAccesslbl = new JLabel("InternetAccess"); 
     final JTextField InternetAccessField = new JTextField(3); 
     InternetAccessField.setText("0"); 

     final JTextField TotalField = new JTextField(10); 
     TotalField.setText("0"); 


     JLabel ButtonLabel = new JLabel("Press Button for Total");  
     JButton button = new JButton("Calculate Total"); 


     JPanel panel = new JPanel(); 

     panel.setLayout(new GridLayout(6,3)); 
     panel.add(ClothingCheckBox); 
     panel.add(Clothinglbl); 
     panel.add(ClothingField); 
     panel.add(BooksCheckBox); 
     panel.add(Bookslbl); 
     panel.add(BooksField); 
     panel.add(SuppliesCheckBox);  
     panel.add(Supplieslbl); 
     panel.add(SuppliesField); 
     panel.add(MealPlanCheckBox); 
     panel.add(MealPlanlbl); 
     panel.add(MealPlanField); 
     panel.add(InternetAccessCheckBox); 
     panel.add(InternetAccesslbl); 
     panel.add(InternetAccessField); 
     panel.add(ButtonLabel); 
     panel.add(button); 
     panel.add(TotalField); 
     frame.add(panel); 

     class CalculateListener implements ActionListener { 


      public void actionPerformed(ActionEvent event) { 

      double Clothing = Double.parseDouble(ClothingField.getText()); 
      double Books = Double.parseDouble(BooksField.getText()) ; 
      double Supplies = Double.parseDouble(SuppliesField.getText()); 
      double MealPlan = Double.parseDouble(MealPlanField.getText()); 
      double InternetAccess = Double.parseDouble(InternetAccessField.getText()); 
      double Total = (Clothing+Books+Supplies+MealPlan+InternetAccess)*100 

     DecimalFormat df = new DecimalFormat("$#.00");//creates decimal in currency format 
     TotalField.setText(df.format(Total)); // 
      } 
     } 

     ActionListener listener = new CalculateListener(); 
     button.addActionListener(listener);      

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 


     } 
} 

答えて

9

チェックボックスの選択状態を決して確認していないためです。私はあなたを提案したい

double total = 0; 
if(ClothingCheckBox.isSelected() && !ClothingField.getText().isEmpty()) { 
    total += Double.parseDouble(ClothingField.getText()); 
} 
if(BooksCheckBox.isSelected() && !BooksField.getText().isEmpty()) { 
    total += Double.parseDouble(BooksField.getText()); 
} 
if(SuppliesCheckBox.isSelected() && !SuppliesField.getText().isEmpty()){ 
    total += Double.parseDouble(SuppliesField.getText()); 
} 
if(MealPlanCheckBox.isSelected() && !MealPlanField.getText().isEmpty()){ 
    total += Double.parseDouble(MealPlanField.getText()); 
} 
if(InternetAccessCheckBox.isSelected() && !InternetAccessField.getText().isEmpty()){    
    total += Double.parseDouble(InternetAccessField.getText()); 
} 
total = total * 100; 
DecimalFormat df = new DecimalFormat("$#.00"); 
TotalField.setText(df.format(total)); 

物事:

  1. java coding conventionを学び、それらを使用することは、このようなものでなければなりません。
  2. また、テキストフィールドで空白の値をチェックしてから、それらを解析して二重にする必要があります。これは、テキストフィールドの値がDoubleに対して解析可能であることを保証するものでもないことに注意してください。
  3. textFieldに数値だけを入れたいと思うようです。それはJTextFieldを使用しないため、JFormattedTextFieldを使用してください。
+1

ありがとうございました。あなたは、教科書や教師よりも良いことを説明しました。 –

+0

@DialloDickerson:答えを受け入れることができます。 –

関連する問題