2014-01-28 94 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' –