2012-04-19 25 views
1

我正在開發基於groceryproducts的GUI項目。對於該程序,我有四個窗口(第一個是主窗口,第二個是將產品添加到庫存並將產品添加到分隔文本文件中,第三個是從庫存中刪除產品以及將其從分隔文本文件中刪除,第四個顯示從分隔的文本文件添加到庫存中的產品)。現在,我已經完成了三個窗口的製作,但是在展示添加到庫存中的產品時,我似乎一直陷入困境。對於查看產品,我在windows包中包含一個文件,其中包含viewGroceryProductInventory類將JTable添加到其中的不同窗口的所有窗口類。如何將數據添加到不同類的jtable?

package prog24178.javaassassins.project.window; 
    import java.util.ArrayList; 
    import javax.swing.*; 
    import javax.swing.table.*; 
    import prog24178.javaassassins.guiproject.GroceryProduct; 
    import prog24178.javaassassins.project.io.ViewProductsFromInventory; 

    /** 
    * 
    * @author Bharat 
    */ 
    public class ViewGroceryProductsWindow extends JPanel { 

    //Create table with column names 



       private String[] columnNames = {"Name of Product" 
            ,"UPC Code","Price","Stock" 
            ,"International","Department"}; 
       private Object[][] data = {}; 
       private DefaultTableModel tableModel = 
           new DefaultTableModel(data,columnNames); 
       private JTable table = new JTable(tableModel); 



       public ViewGroceryProductsWindow(){ 
       JScrollPane jscroll = new JScrollPane(table); 

       this.add(jscroll); 


       tableModel.addRow(data); 
     } 

    } 

我有另一個io軟件包,其中有不同的類去除和添加產品分隔文本文件。對於ViewAGroceryProductInInventory類我已經完成從文件中提取數據,但現在應該如何將我的字段添加到窗口包中的windows類中定義的JTable的行中?我知道行的數據必須插入到tableModel中才能顯示該行。現在,我面臨的問題是,我正在從另一個包中的另一個類執行此操作,所以如何將文本文件中的字段添加到io包中類中的窗口包中的類中的行數據?

package prog24178.javaassassins.project.io; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.Scanner; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 
import prog24178.javaassassins.guiproject.GroceryProduct; 


/** 
    * 
    * @author Bharat 
    */ 
public class ViewProductsFromInventory{  


     Scanner input = null; 
     int counter = 0; 

     public ViewProductsFromInventory(){ 

      File file = new File("GroceryProduct.txt"); 
      if(!file.exists()){ 
        System.out.println("GroceryProduct.txt doesn't exist"); 
        System.exit(0); 
      } 

      try{ 

        input = new Scanner(file); 
        ArrayList<GroceryProduct> inventory = new ArrayList(); 
        int counter=0; 
        while(input.hasNext()){ 

         String record = input.next();  
         String[] fields = record.split("\\|"); 

         String nameOfProduct= fields[0]; 

         String upcCodeOfProduct = fields[1]; 


         double priceOfProduct = Double.parseDouble(fields[2]); 
         Boolean productInStock = Boolean.parseBoolean(fields[3]); 
         Boolean FromInternational = Boolean.parseBoolean(fields[4]); 
         String productDepartment = fields[5];     
         GroceryProduct groceryProduct = 
             new GroceryProduct(nameOfProduct, 
                 upcCodeOfProduct,priceOfProduct, 
                 productInStock, 
                 FromInternational, 
                productDepartment); 


         inventory.add(groceryProduct); 

       } 
       input.close(); 

       }catch(FileNotFoundException ex){ 

       System.out.print(ex.getLocalizedMessage()); 

      } 
     } 
    } 

回答

1

列名和行數據是程序的數據模型的一部分,所以我給ProductsFromInventory公共getModel()方法返回一個完全構造TableModel,適合初始化您JTable視圖

如果你能定義的格式,你可以提供的文件名作爲參數的構造,並從文件的第一行讀取(分隔)的名稱。