将文件数据读入JTable

Saj*_*jad 1 java file-io swing file jtable

我想从.txt文件中读取数据并将它们发送到我的表中.我该怎么办?我的代码:

public class InsertFileDataToJTable extends AbstractTableModel {
    Vector data;
    Vector columns;

    public InsertFileDataToJTable() {
            String line;
            data = new Vector();
            columns = new Vector();
            try {
                    FileInputStream fis = new FileInputStream("student.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);
    }

    public static void main(String s[]) {
            InsertFileDataToJTable model = new InsertFileDataToJTable();
            JTable table = new JTable();
            table.setModel(model);
            JScrollPane scrollpane = new JScrollPane(table);
            JPanel panel = new JPanel();
            panel.add(scrollpane);
            JFrame frame = new JFrame();
            frame.add(panel, "Center");
            frame.pack();
            frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

请帮忙!谢谢.

nul*_*ptr 6

您在代码中遇到了什么问题?

我运行你的代码,它工作得很好,除了列名将是默认的A,B,...因为你没有从模型中检索列名的方法.你已经实现了方法getValueAt(),并且完美地工作.只需在上面的类中为列名添加新方法:

public String getColumnName(int i){
    return (String)columns.get(i);
}
Run Code Online (Sandbox Code Playgroud)

如果您有任何其他问题,请让我们知道.我只运行了2列,所以没有完全测试getValueAt()方法.