我有一个看起来像这样的文本文件
---
*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++;
}
}
如何获取表格中的所有条目(不仅仅是最后一项)?
答案 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);