java将数据从文本文件显示到JTable
我的文本文件包含以下数据:sample。txt
MEMHEAD 1 1 NA设置字符串SRC代码
MEMHEAD 1 2 NA设置字符串memIdnum
LGLNAME 1 5 NA先设置字符串
我已经创建了MyClassModel
类,扩展AbstractTableModel
为:
public class MyClassModel extends AbstractTableModel
{
Vector data;
Vector columns;
public MyTableModel() {
String line;
try {
FileInputStream fis = new FileInputStream("sample.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
StringTokenizer st1 = new StringTokenizer(br.readLine(), ",");
while (st1.hasMoreTokens())
columns.addElement(st1.nextToken());
while ((line = br.readLine()) != null) {
StringTokenizer st2 = new StringTokenizer(line, ",");
while (st2.hasMoreTokens())
data.addElement(st2.nextToken());
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public int getRowCount() {
return data.size() / getColumnCount();
}
public int getColumnCount() {
return columns.size();
}
public Object getValueAt(int rowIndex, int columnIndex) {
return (String) data.elementAt((rowIndex * getColumnCount())
+ columnIndex);
}
}
}
通过这种方式,我从一个文件中检索数据。现在,当我制作一个JTable
并使用table.setModel(MyTableModel)
设置模型时。我得到了一个NullPointerException
继续:
文本文件数据显示在JTable中,但JTable还包含一些额外的行和一些垃圾数据,当我按下这些行时
java.lang.ArrayIndexOutOfBoundsException: 180 >= 180
将引发此异常。
然而,我发现这条线有一些问题
public Object getValueAt(int rowIndex, int columnIndex) {
return (String) data.elementAt((rowIndex * getColumnCount()) + columnIndex);
}
但我不知道问题出在哪里。请帮忙
# 1 楼答案
您正在向这两个
Vectors
添加数据,而没有初始化它们在添加元素之前初始化它们
完成此操作后,检查您是否得到NullPointerException
如果你仍然得到
NPE
,那么我怀疑你没有初始化JTable
。所以发布代码,让我们知道异常的确切位置# 2 楼答案
文本文件中的数据也可以使用DefaultTableModel添加到JTable中。这是一种简单而有效的方法