我正在尝试使用从网站获取的信息(即价格和项目名称)填充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很新,这可能有一个明显的解决方案,但我已经坚持了几天,并且无法弄明白。谢谢。
答案 0 :(得分:1)
我不确定您的数据到底是怎么回事,但是您想要做这样的事情。由于您正在尝试将数据写入三个不同的文件,我将假设数据来自三个不同的流。不过这是件事。为此,所有数据都需要并行,这意味着第一项应该与第一个价格和第一个网址相对应,依此类推。如果是这种情况,你可以这样做。
有三个单独的列表。
List<String> names = new ArrayList<String>();
List<String> prices = new ArrayList<String>();
List<String> urls = new ArrayList<String>();
然后,对于要添加到文件的每个项目,请添加到列表中。
使用DefaultTableModel
作为JTable
String[] columnName = {"Item Name", "Price", "URL"};
DefaultTableModel model = new DefaultTableModel(columnNames, 0);
table = new JTable(model);
现在您可以使用列表中的数据添加行。使用方法model.addRow(row)
,其中row
是Objects
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中一样。