0

杂货店

import java.awt.*;

import javax.swing.*;
import java.awt.event.*;
import java.text.DecimalFormat;

/**
   Grocery shop class

*/

public class Grocery_shop extends JFrame
{

   private quantitypanel qty; // A panel for quantity
   private Grocery_items items;       // A panel for routine charge checkboxes
   private JPanel buttonPanel; // A panel for the buttons
   private JButton calcButton;         // Calculates everything
   private JButton exitButton;         // Exits the application

   private invoiceClass invoice;

   /**
      Constructor
   */

   public Grocery_shop()
   {
      // Display a title.
      setTitle("Victor's Grocery Shop");

      // Specify what happens when the close button is clicked.
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


 // Create a NonRoutinePanel object.
      qty = new quantitypanel();
    //  qty.setBackground(Color.white);

      // Create a RoutinePanel object.
      items = new Grocery_items( qty );



      // Build the panel that contains the buttons.
      buildButtonPanel();

      // Add the panels to the content pane.
      add(items, BorderLayout.WEST);
      add(qty, BorderLayout.EAST);
      add(buttonPanel, BorderLayout.SOUTH);

      // Pack and display the window.
      pack();
      setVisible(true);
   }

   /**
      The buildButtonPanel method creates a panel containing
      buttons.
   */

   private void buildButtonPanel()
   {
      // Create a button to calculate the charges.
      calcButton = new JButton("Add Charges");

      // Add an action listener to the button.
      calcButton.addActionListener(new CalcButtonListener());

      // Create a button to exit the application.
      exitButton = new JButton("Exit");

      // Add an action listener to the button.
      exitButton.addActionListener(new ExitButtonListener());

      // Put the buttons in their own panel.
      buttonPanel = new JPanel();
      buttonPanel.add(calcButton);
      buttonPanel.add(exitButton);
   }

   /**
      CalcButtonListener is an action listener class for the
      calcButton component.
   */

   private class CalcButtonListener implements ActionListener
   {
      /**
         actionPerformed method
         @param e An ActionEvent object.
      */

      public void actionPerformed(ActionEvent e)
      {
         double totalCharges; // Total charges

         // Create a DecimalFormat object to format output.
         DecimalFormat dollar = new DecimalFormat("#,##0.00");

         // Calculate the total charges
         totalCharges = items.getCharges(); 
                 //+ nonRoutine.getCharges();

         // Display the message.
         JOptionPane.showMessageDialog(null, "Total Charges: $" + 
                                             dollar.format(totalCharges));
         invoice = new invoiceClass();
         invoice.getClass();
      }
   } // End of inner class

   /**
      ExitButtonListener is an action listener class for the
      exitButton component.
   */

   private class ExitButtonListener implements ActionListener
   {
      /**
         actionPerformed method
         @param e An ActionEvent object.
      */

      public void actionPerformed(ActionEvent e)
      {

         System.exit(0);
      }
   } // End of inner class

   /**
      The main method creates an instance of the JoesAutomotive
      class, causing it to display its window.
   */

   public static void main(String[] args)
   {
      Grocery_shop grocery = new Grocery_shop();
   }
}

Grocery_items

import java.awt.*;
import javax.swing.*;

import java.text.DecimalFormat;

/**
   RoutinePanel class

*/

public class Grocery_items extends JPanel
{
   // Named constants for charges
   private final double Baked_Beans  = 0.35;
   private final double Cornflakes = 1.75;
   private final double Sugar = 0.75;
   private final double Tea_Bags = 1.15;
   private final double Instant_Coffee = 2.50;
   private final double Bread = 1.25;
   private final double Sausage = 1.30;
   private final double Eggs = 0.75;
   private final double Milk = 0.65;
   private final double Potatoes = 2.00;

   private quantitypanel qty; // A panel for quantity


   private JCheckBox baked_beans_box;     // Check box for baked_beans
   private JCheckBox CornflakesBox;       // Check box for cornflakes
   private JCheckBox SugarBox; // Check box for sugar box
   private JCheckBox Tea_Bags_Box;    // Check box for tea bag
   private JCheckBox Instant_Coffee_Box;    // Check box for Instant_Coffee_Box
   private JCheckBox Bread_Box;       // Check box for bread box
   private JCheckBox SausageBox;  // Check box for sausage box
   private JCheckBox eggbox;  // Check box for egg box
   private JCheckBox milkbox;  // Check box for milk
   private JCheckBox potatoesbox;  // Check box for potatoes

 //  private JTextField baked_beans_JT; 
   /**
      Constructor
   */

   public Grocery_items(quantitypanel qty)
   {
    this.qty = qty;
      DecimalFormat dollar = new DecimalFormat("#,##0.00");


      // Create the check boxes.
      baked_beans_box = new JCheckBox("Baked_Beans ($" +
                                dollar.format(Baked_Beans) + ")");



      CornflakesBox = new JCheckBox("Cornflakes ($" +
                              dollar.format(Cornflakes) + ")");
      SugarBox = new JCheckBox("Sugar ($" + 
                                    dollar.format(Sugar) + ")");
      Tea_Bags_Box = new JCheckBox("Tea Bags ($" + 
                                 dollar.format(Tea_Bags) + ")");
      Instant_Coffee_Box = new JCheckBox("Instant Coffee_Box ($" + 
                                 dollar.format(Instant_Coffee) + ")");
      Bread_Box = new JCheckBox("Bread Box ($" + 
                              dollar.format(Bread) + ")");
      SausageBox = new JCheckBox("Suasages ($" + 
                                   dollar.format(Sausage) + ")");
      eggbox = new JCheckBox("Eggs ($" + 
              dollar.format(Eggs) + ")");

      milkbox = new JCheckBox("Milk ($" + 
              dollar.format(Milk) + ")");
      potatoesbox = new JCheckBox("Potatoes ($" + 
              dollar.format(Potatoes) + ")");

      // Create a GridLayout manager.
      setLayout(new GridLayout(10, 1));

      // Create a border.
      setBorder(BorderFactory.createTitledBorder("Grocery Items"));

      // Add the check boxes to this panel.
      add(baked_beans_box);
      add(CornflakesBox);
      add(SugarBox);
      add(Tea_Bags_Box);
      add(Instant_Coffee_Box);
      add(Bread_Box);
      add(SausageBox);
      add(eggbox);
      add(milkbox);
      add(potatoesbox);

   }



   /**
      The getCharges method calculates the routine charges.
      @return The amount of routine charges.
   */

   public double getCharges()
   {
      double charges = 0;

      if (baked_beans_box.isSelected())
         charges += Baked_Beans * qty.getBeanqty();
      if (CornflakesBox.isSelected())
         charges += Cornflakes;
      if (SugarBox.isSelected())
         charges += Sugar;
      if (Tea_Bags_Box.isSelected())
         charges += Tea_Bags;
      if (Instant_Coffee_Box.isSelected())
         charges += Instant_Coffee;
      if (Bread_Box.isSelected())
         charges += Bread;
      if (SausageBox.isSelected())
         charges += Sausage;
      if (eggbox.isSelected())
          charges += Eggs;
      if (milkbox.isSelected())
          charges += Milk;
      if (potatoesbox.isSelected())
          charges += Potatoes;



      return charges;
   }
}

数量面板

    //import java.awt.LayoutManager;
    import java.awt.GridLayout;
    //import javax.swing.JCheckBox;
    //import javax.swing.JLabel;
    import javax.swing.BorderFactory;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTextField;


    public class quantitypanel extends JPanel {
         private JTextField baked_beans_JT;     // JTextField box for baked_beans
           private JTextField Cornflakes_JT;       // JTextField box for cornflakes
           private JTextField Sugar_JT; // JTextField box for sugar box
           private JTextField Tea_Bags_JT;    // JTextField box for tea bag
           private JTextField Instant_Coffee_JT;    // JTextField box for Instant_Coffee_Box
           private JTextField Bread_JT;       // JTextField box for bread box
           private JTextField Sausage_JT;  // JTextField box for sausage box
           private JTextField egg_JT;  // JTextField box for egg box
           private JTextField milk_JT;  // JTextField box for milk
           private JTextField potatoes_JT;  // JTextField box for potatoes


           public quantitypanel()
           {

               //create JTextField.
               baked_beans_JT = new JTextField(5);
               Cornflakes_JT = new JTextField(5);
               Sugar_JT = new JTextField(5);
               Tea_Bags_JT = new JTextField(5);
               Instant_Coffee_JT = new JTextField(5);
               Bread_JT = new JTextField(5);
               Sausage_JT = new JTextField(5);
               egg_JT = new JTextField(5);
               milk_JT = new JTextField(5);
               potatoes_JT = new JTextField(5);


               //initialize text field to 0
               baked_beans_JT.setText("0");
               Cornflakes_JT.setText("0");
               Sugar_JT.setText("0");
               Tea_Bags_JT.setText("0");
               Instant_Coffee_JT.setText("0");
               Bread_JT.setText("0");
               Sausage_JT.setText("0");
               egg_JT.setText("0");
               milk_JT.setText("0");
               potatoes_JT.setText("0");




               //set Layout manager
               setLayout(new GridLayout(10, 1));

               //create border and panel title

              setBorder(BorderFactory.createTitledBorder("Amount"));

              //add text fields to the panel.
              add(baked_beans_JT);
              add(Cornflakes_JT);
              add(Sugar_JT);
              add(Tea_Bags_JT);
              add(Instant_Coffee_JT);
              add(Bread_JT);
              add(Sausage_JT);
              add(egg_JT);
              add(milk_JT);
              add(potatoes_JT);


           }

           public double getBeanqty()
             {
                 try
           {
                 return Double.parseDouble(baked_beans_JT.getText());


           }

           catch(NumberFormatException ev){
               JOptionPane.showMessageDialog(null, "invalid");
           }
                return 0;

           }

    }



invoiceClass


import java.awt.*;

import javax.swing.*;

import java.awt.event.*;
import java.text.DecimalFormat;


public class invoiceClass {
    private Grocery_items items;
    private quantitypanel qty; // A panel for quantity



    {
         double total; // Total charges

 DecimalFormat dollar = new DecimalFormat("#,##0.00");


 qty = new quantitypanel();

 items = new Grocery_items(qty);

         // Calculate the total charges

         double payment = 0.0;
         String input;
     input = JOptionPane.showInputDialog(null, "enter a your payment");
     payment = Double.parseDouble(input);
     total = payment - items.getCharges(); 
      JOptionPane.showMessageDialog(null, "your change is: " + total);

}
}

请使用上面的代码,我正在尝试为该程序制作收据。

我希望在此代码total = payment - items.getCharges();中让系统获取总费用并将其从用户输入的数字中减去。在这种情况下,系统只识别付款。

请帮忙..

谢谢

4

1 回答 1

1

items.getCharges()返回 0的原因invoiceClass是每次CalcButtonListener Action发生 a 时都会创建一个新实例。这将创建一个新Grocery_items实例。

反过来,这会创建新的 GUI 元素,包括复选框。这些复选框在应用程序中不可见,因为它们尚未添加。现在当你去调用时,新创建getCharges的选择状态将是(默认状态),所以不会添加任何费用JCheckBoxesGrocery_itemsfalseJCheckBox

public double getCharges() {
   double charges = 0;

if (baked_beans_box.isSelected()) // now false!
   charges += Baked_Beans * qty.getBeanqty(); 
if (...)

因此,解决方案不是创建Grocery_items而是quantitypanel使用原始实例。

旁白:使用 Java 命名约定具有以大写开头的类,例如QuantityPanel. 通常不使用下划线,例如GroceryItems

于 2013-04-11T14:54:12.197 回答