2014-01-28 91 views
0

我試圖用從網站獲取的信息(即價格和項目名稱)填充JTable。我有一個課程要求用戶輸入一個URL並掃描頁面的價格和項目名稱以及URL。目前它將所有解析的信息存儲在三個不同的文本文件中,一個用於價格,一個用於項目名稱,另一個用於URL。我試圖用這些信息填充一個包含三列(項目名稱,價格和URL)的JTable,但是每次我掃描新頁面時,文本文件都會被覆蓋,並且以前的信息會丟失。我不一定需要通過文本文件填充JTable,我只是需要它以某種方式獲取信息。這是我的一些代碼。使用解析的信息填充JTable

public BestBuy (JFrame frame){ 
      super (frame, "Best Buy URL", true); 
      setLayout (new FlowLayout()); 

      label = new JLabel ("Enter Best Buy URL"); 
      add (label); 

      url = new JTextField ("Enter URL Here", 40); 
      add (url); 

      submit = new JButton ("Submit"); 
      add (submit); 

      event b = new event(); 
      submit.addActionListener (b); 
     } 

     public class event implements ActionListener{ 
      public void actionPerformed (ActionEvent b){ 
       try {  
        String datab = url.getText(); //perform your operation 
        datab = datab.trim(); 
        datab = datab.toLowerCase(); 
        Document document = Jsoup.connect(datab).get(); 
        String amountb = document.select(".amount").first().text(); 
        String nameb = document.select(".product-title").first().text(); 
        FileWriter stream = new FileWriter  ("C:\\Users\\Daniel\\Desktop\\price.txt"); 
        BufferedWriter out = new BufferedWriter (stream); 
        out.write(amountb + "\n"); 
        out.newLine(); 
        out.close(); 
        FileWriter stream1 = new FileWriter ("C:\\Users\\Daniel\\Desktop\\itemName.txt"); 
        BufferedWriter out1 = new BufferedWriter (stream1); 
        out1.write(nameb + "\n"); 
        out1.newLine(); 
        out1.close(); 
        FileWriter stream2 = new FileWriter ("C:\\Users\\Daniel\\Desktop\\url.txt"); 
        BufferedWriter out2 = new BufferedWriter (stream2); 
        out2.write(datab + "\n"); 
        out2.newLine(); 
        out2.close(); 
       } 
       catch (Exception ex) { 

       } 
       setVisible (false); 
      } 

此課程向用戶詢問最佳購買網址並解析給定頁面的商品名稱,然後將價格寫入我的桌面上的文件。

public FirstGui(){ 
     setLayout (new FlowLayout()); 

     String[] columnName = {"Item Name", "Price", "URL"}; 

     Object [] [] data = { 

     }; 


     table = new JTable (data, columnName); 
     table.setPreferredScrollableViewportSize(new Dimension (500, 300)); 
     table.setFillsViewportHeight (true); 

     JScrollPane scrollpane = new JScrollPane (table); 
     add (scrollpane); 

現在我試圖將解析的信息放到我的JTable上,但我不知道如何去做。我試圖做

public getdatab() { 
return datab; 
} 
public getnameb() { 
return nameb; 
} 
public getamountb() { 
return amountb; 
} 

但所有這些字符串都在一個無效,所以沒有工作。正如你可能看到我對Java很新,這可能有一個明顯的解決方案,但我一直堅持這幾天,不能弄明白。謝謝。

+0

您的'getdatab()'沒有返回類型。那你的意思是無效的嗎? – csmckelvey

+0

您應該設置模型(填充數據)並使用setTableModel()方法將其附加到表格。 – KernelPanic

回答

1

我不確定您的數據是如何得到的,但您想要這樣做。由於您試圖將數據寫入三個不同的文件,因此我會假定數據來自三個不同的數據流。儘管如此。爲此,所有數據需要並行,意思是第一個項目應該對應於第一個價格和第一個URL,等等。如果是這種情況,你可以做這樣的事情。

  1. 有三個單獨的列表。

    List<String> names = new ArrayList<String>(); 
    List<String> prices = new ArrayList<String>(); 
    List<String> urls = new ArrayList<String>(); 
    
  2. 然後爲你要添加到文件中的每個項目,添加到列表中,而不是。

  3. 使用DefaultTableModel爲您JTable

    String[] columnName = {"Item Name", "Price", "URL"}; 
    DefaultTableModel model = new DefaultTableModel(columnNames, 0); 
    table = new JTable(model); 
    
  4. 現在你只需添加行的模式,使用從列表中的數據。使用方法model.addRow(row),其中rowObjects

    for (int i = 0; i < names.size(); i++) { 
        String name = names.get(i); 
        String price = prices.get(i); 
        String url = urls.get(i); 
    
        model.addRow(new Object[] { name, price, url }); 
    } 
    

這是所有有給它一個數組。該模型將動態更新您的表格。但請記住,正如我所說的,列表中的數據必須彼此同步才能獲得理想的結果。

如果您一次只獲取一行數據,而不是一次一列,那就更容易了。對於每一組數據,只需將其添加爲與第5步中所做的相同的行。

+0

我收到一個錯誤,說「類型列表不是通用的;它不能用參數參數化」。我之前從未使用過列表,所以我不知道這裏發生了什麼。 – user3216518

+0

Lake確定你導入了'java.util.List'而不是'java.awt.List' –