使用已分析的信息填充JTable

时间:2014-01-28 19:39:26

标签: java swing jtable

我正在尝试使用从网站获取的信息(即价格和项目名称)填充JTable。我有一个类要求用户输入URL并扫描页面以查看价格和项目名称以及URL。目前,它将所有已解析的信息存储在三个不同的文本文件中,一个用于价格,一个用于项目名称,一个用于URL。我正在尝试使用此信息填充包含三列(项目名称,价格和URL)的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);
            } 

此类要求用户提供Best Buy URL并解析给定页面的项目名称,然后将价格写入桌面上的文件。

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很新,这可能有一个明显的解决方案,但我已经坚持了几天,并且无法弄明白。谢谢。

1 个答案:

答案 0 :(得分:1)

我不确定您的数据到底是怎么回事,但是您想要做这样的事情。由于您正在尝试将数据写入三个不同的文件,我将假设数据来自三个不同的流。不过这是件事。为此,所有数据都需要并行,这意味着第一项应该与第一个价格和第一个网址相对应,依此类推。如果是这种情况,你可以这样做。

  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. 这就是它的全部。该模型将动态更新表格。但请记住,就像我说的那样,列表中的数据必须彼此同步才能获得所需的结果。

    如果您一次只获取一行数据,而不是一次只获取一列,则可以更轻松。对于每一组数据,只需将其添加为行,就像在步骤5中一样。