java如何从不同的类向jtable添加数据?
我正在做一个基于groceryproducts的GUI项目。对于该程序,我有四个窗口(第一个窗口是主窗口,第二个窗口用于向库存添加产品并在分隔文本文件中添加产品,第三个窗口用于从库存中删除产品并将其从分隔文本文件中删除,第四个窗口用于显示从分隔文本文件添加到库存中的产品)。现在,我已经完成了三个窗口的制作,但在展示添加到库存中的产品时,我似乎被卡住了。为了查看产品,我在windows包中有一个文件,其中包含不同窗口的所有窗口类,其中添加了viewGroceryProductInventory类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类,我已经完成了从文件中提取数据的工作,但是现在我应该如何将字段添加到JTable中的行中,JTable是在windows包中的windows类中定义的?我知道行的数据必须插入到tableModel中才能显示行。现在,我面临的问题是,我是在另一个包中的另一个类中执行此操作的,那么如何将文本文件中的字段从io包中的类添加到Windows包中的类中的行数据
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
,适合初始化^{如果允许定义格式,可以将文件名作为参数提供给构造函数,并从文件的第一行读取(分隔的)名称