有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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);
}

但我不知道问题出在哪里。请帮忙


共 (2) 个答案

  1. # 1 楼答案

    您正在向这两个Vectors添加数据,而没有初始化它们

    Vector data;
    Vector columns;
    

    在添加元素之前初始化它们

    Vector data = new Vector();
    Vector columns = new Vector();
    

    完成此操作后,检查您是否得到NullPointerException

    如果你仍然得到NPE,那么我怀疑你没有初始化JTable。所以发布代码,让我们知道异常的确切位置

  2. # 2 楼答案

    文本文件中的数据也可以使用DefaultTableModel添加到JTable中。这是一种简单而有效的方法

             FileInputStream fis = new FileInputStream("sample.config");
            BufferedReader br1 = new BufferedReader(new InputStreamReader(fis));
            DefaultTableModel dtm= new DefaultTableModel(0,6);  
        // (for each line in file)
        while ((line = br1.readLine()) != null) 
              {
        dtm.addRow(line.split(" ")); 
         }
        br.close();
        dtm.setColumnIdentifiers(new Object[] { "Attribute"," #","Position",         "Transformation","Assignment","Field","Constant" });