从文件读取并将数据放入JTable

时间:2015-12-05 00:21:34

标签: java swing nullpointerexception jtable readfile

我有一个看起来像这样的文本文件

---
*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++;  
                   }
       }

如何获取表格中的所有条目(不仅仅是最后一项)?

1 个答案:

答案 0 :(得分:3)

  

它只在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);