我有一个看起来像这样的文本文件
---
*Jack
*James
Tim
*Hannah
Kim
我希望程序读取文件的每一行并获取不带*的名称,并将其显示在
JTable
中。我想出了以下代码,但它仅在表中显示姓氏“ Kim”。这是问题所在的代码的一部分。public class GUI extends JPanel{
public JFileChooser fileChooser;
public JButton openbtn;
public BufferedReader br;
public File file;
public GUI(){
fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
if (fileChooser.showOpenDialog(openbtn)==JFileChooser.APPROVE_OPTION){
String fName = null;
file = fileChooser.getSelectedFile();
try{
br = new BufferedReader(new FileReader(file));
String nextLine;
while ((nextLine = br.readLine()) != null)
{
if (nextLine.startsWith("---"))
{
String[] f = nextLine.split("*");
fName = f[1];
}
}
String[] columns = {"FirstName"};
Object[][] data = {{fName}};
JTable tableVIEW = new JTable(data, columns);
tableVIEW.setPreferredScrollableViewportSize(new Dimension(250, 35));
tableVIEW.setFillsViewportHeight(true);
br.close();
}
catch (IOException e) {
System.out.println("Error - INVALID FILE. PLEASE TRY AGAIN");
}
}
}
}
因此,我尝试将
fName
放入数组并使用计数器,但是浏览文件时出现此错误Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
和代码:
if (fileChooser.showOpenDialog(openbtn)==JFileChooser.APPROVE_OPTION){
String[] fName = null;
int counter = 0;
file = fileChooser.getSelectedFile();
try{
br = new BufferedReader(new FileReader(file));
String nextLine;
while ((nextLine = br.readLine()) != null)
{
if (nextLine.startsWith("---"))
{
String[] f = nextLine.split("*");
fName[counter] = f[1];
counter++;
}
}
如何获取表中的所有条目(不仅仅是最后一个条目)?
最佳答案
它仅在Jtable中显示姓氏“ Kim”
Object[][] data = {{fName}};
您只需向数据数组添加一条信息。
相反,您需要为TableModel添加每个唯一的数据。因此,首先使用以下代码创建DefaultTableModel(从文件中读取数据之前):
String[] columns = {"FirstName"};
DefaultTableModel model = new DefaultTableModel(columns, 0);
然后在循环中,只要您从文件中读取数据,就将数据添加到模型中:
Vector row = new Vector(1);
row.add( f[1] );
model.addRow( row );
然后,在循环完成之后,创建表:
JTable tableVIEW = new JTable(model);