2013-04-11 39 views
0

Grocery_shop类不是从另一个类

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; 
    } 
} 

quantitypanel

//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();为系统获得的总费用从数减去它的用户输入。在这种情况下,系统只会识别付款。

请帮助..

感谢

+0

当你说该系统不能识别items.getCharges(),你是什么意思?你有编译时错误吗?它说什么? – 2013-04-11 14:36:36

+0

我还要指出,在Java中,类的命名规则是这样做GroceryItems.java,QuantityPanel.java,GroceryShop.java。 – 2013-04-11 14:37:27

+0

例如如果付款的值是10,则系统仅打印在的JOptionPane 10。我希望它得到费用,并从付款中扣除。 – 2013-04-11 14:39:15

回答

1

之所以items.getCharges()返回0,是一个新的invoiceClass实例被创建每次CalcButtonListenerAction发生的时间。这会创建一个新的Grocery_items实例。

这反过来又创造了新的GUI元素,包括复选框。这些复选框不是应用程序中可见的复选框,因为它们尚未添加。现在,当你去打电话getCharges,该JCheckBoxes新创建Grocery_items的选择状态将false(的JCheckBox默认状态),所以没有收费将被添加

public double getCharges() { 
    double charges = 0; 

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

的解决方案,因此,不创建Grocery_items in quantitypanel但要使用原始实例。

旁白:使用Java的命名约定具有与大写QuantityPanel开始上课。通常不使用下划线,例如GroceryItems

+0

请问你是什么意思的原始实例。 – 2013-04-11 15:28:26

+0

在Grocery_shop构造函数中创建的'Grocery_items'实例 – Reimeus 2013-04-11 15:29:48