使用Java从GUI添加数据

时间:2012-12-02 20:01:27

标签: java swing

所以我想创建一个零售GUI。员工选择部门,输入项目名称,价格和折扣。他应该能够输入多个项目的数据,然后应该能够打印并且应该出现Jtable。我遇到的问题是编写代码以便能够为他输入的每个项目更新arraylist。我似乎每次都覆盖位置[0]并且它不存储新项目。我也不知道从哪里开始Jtable。我是Java的新手,所以非常感谢你给予的任何帮助。

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


  public class RetailGUI extends JFrame
   {

     // The following variables will reference the
      // custom panel objects.
      private DepartmentPanel department;     
      private ItemPanel item; 
      private PricePanel price;    
      private TitlePanel title;  // To display a greeting

      // The following variables will reference objects
      // needed to add Next and Exit buttons.
      private JPanel buttonPanel;    // To hold the buttons
      private JButton nextButton,
                      printButton,
                      exitButton;    // To exit the application


      /**
      * Constructor
       */

      public RetailGUI()
      {
        // Display a title.
         super("Retail Calculator");

         setSize(600, 250);

         // Specify an action for the close button.
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setLocationRelativeTo(null);

         // Create a BorderLayout manager for
         // the content pane.
         setLayout(new BorderLayout());

        // Create the custom panels.
         title = new TitlePanel();
         department = new DepartmentPanel();
         item = new ItemPanel();
         price = new PricePanel();

         // Call the buildButtonPanel method to
         // create the button panel.
         buildButtonPanel();

        // Add the components to the content pane.
         add(title, BorderLayout.NORTH);
         add(department, BorderLayout.WEST);
         add(item, BorderLayout.CENTER);
         add(price, BorderLayout.EAST);
         add(buttonPanel, BorderLayout.SOUTH);

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

      /**
       * The buildButtonPanel method builds the button panel.
       */

      private void buildButtonPanel()
      {
         // Create a panel for the buttons.
         buttonPanel = new JPanel();

         // Create the buttons.
         nextButton = new JButton("Next");
         printButton = new JButton("Print");
         exitButton = new JButton("Exit");

        // Register the action listeners.
         nextButton.addActionListener(new RetailGUI.NextButtonListener());
         printButton.addActionListener(new RetailGUI.PrintButtonListener());
         exitButton.addActionListener(new RetailGUI.ExitButtonListener());

         // Add the buttons to the button panel.
         buttonPanel.add(nextButton);
         buttonPanel.add(printButton);
         buttonPanel.add(exitButton);
      }

      /**
      * Private inner class that handles the event when
       * the user clicks the Next button.
       */     

      private class NextButtonListener implements ActionListener
     {
         public void actionPerformed(ActionEvent e)
         {

             String departmentName,
                    finalItem;
             float    priceField,
                      discountField,
                      newPrice;

          ArrayList   DepartmentList            = new ArrayList();
          ArrayList   ItemList                  = new ArrayList();
          ArrayList   PriceList                 = new ArrayList();
          ArrayList   DiscountList              = new ArrayList();
          ArrayList   NewPriceList              = new ArrayList();




          departmentName = department.getDepartmentName();
          finalItem = item.getItemName();
          priceField = price.getPriceField();
          discountField = price.getDiscountField();
          newPrice = priceField - (priceField * (discountField/100));

          DepartmentList.add(departmentName);



          System.out.print(DepartmentList);


           JOptionPane.showMessageDialog(null,"Department:        " + departmentName + "\n" + 
                                             "Item Name:          " + finalItem + "\n" +
                                              "Orginal Price:     $" + priceField + "\n" +
                                              "Discount:               " + discountField + "%" + "\n" +
                                              "New Price:          $" + newPrice + "\n");
        }
     } 

      private class PrintButtonListener implements ActionListener
     {
         public void actionPerformed(ActionEvent e)
         {


        }
     }      

     private class ExitButtonListener implements ActionListener
     {
        public void actionPerformed(ActionEvent e)
       {
           // Exit the application.
           System.exit(0);
        }
     }
}

1 个答案:

答案 0 :(得分:3)

您已在ArrayList actionPerformed方法的NextButtonListener方法中声明了Transaction

这意味着每次单击按钮时,您都会创建全新的,短暂的,列表,将项目添加到其中,然后丢弃结果(允许垃圾收集器在将来的某个时间接收它们)。

您需要将这些列表移动到范围级别,以便应用程序的各个部分可以看到它们(可能是类级字段?)。

而不是使用多个数组列表,这些列表很容易让列表彼此不同步,创建某种包含与事务相关的所有信息的数据对象会更好。

让我们说一个TransactionItem对象,其中包含departmentname个。每个项目都包含itemNameoriginalPricediscountTransaction(新价格是计算字段,无需存储)

然后

TransactionItem将包含 N Transaction

每次点击,您都会获得当前的TransactionItem对象,并根据用户输入的值为其添加新的Transaction

这将允许您为JTable提供支持功能,例如事务的总值,例如

在开发{{1}}视图时,这将变得非常容易。