从向量填充JTable时出错

时间:2013-07-10 17:01:46

标签: java swing vector jtable

我正在尝试使用矢量从文本文件填充表格。我应该为每一行创建一个新的向量吗?我的代码还有其他什么问题吗?我不太清楚从这里做什么。

public class myJTable {

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Vector<String> v = new Vector<String>();
        Vector<Vector<String>> rowData = new Vector<Vector<String>>();

        //String splitting
        try {
            FileReader fReader = new FileReader("lakedata.txt");
            BufferedReader inFile = new BufferedReader(fReader);
            String input;
            String[] temp;

            while((input=inFile.readLine())!=null) {
                temp = input.split(",",3);
                for(int i=0; i<temp.length; i++) {
                    v.addElement(temp[i]);
                    System.out.println(temp[i]);
                    }

                System.out.println(v);
                rowData.addElement(v);
                }

            inFile.close();
            } 

        catch(Exception e) {
                System.out.println("ERROR");    
        }

        Vector<String> columnNames = new Vector<String>();
        columnNames.addElement("Depth");
        columnNames.addElement("Temperature");
        columnNames.addElement("D.O.");
        JTable table = new JTable(rowData, columnNames);
        JScrollPane scrollPane = new JScrollPane(table);
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(500,300);
        frame.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:0)

您可以创建一个DefaultTableModel,然后将其设置为表的模型,然后调用其addRow方法直接将读取行结果放入表中,而不是使用Vector。当添加到表的数据时,该表将自动更新。

我冒昧地将您的代码修改为更清晰的代码。

import java.awt.BorderLayout;
import java.io.BufferedReader;
import java.io.FileReader;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class TablePopulation {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override public void run() {

                JTable table = new JTable();
                JScrollPane scrollPane = new JScrollPane(table);

                /* Set the table data to null first since 
                 * we will fetch data from file line by line
                 * -------------------------------------- */
                DefaultTableModel model = new DefaultTableModel(null, new String[]{"Depth","Temperature","D.O."});
                table.setModel(model);

                /* String splitting
                 * ---------------- */
                try {
                    FileReader fReader = new FileReader("file.txt");
                    BufferedReader inFile = new BufferedReader(fReader);
                    String input = inFile.readLine();

                    while(input !=null) {
                        String[] temp = input.split(",");
                        model.addRow(temp);

                        input = inFile.readLine();
                    }

                    inFile.close();
                }catch(Exception e) {
                    e.printStackTrace();
                }

                JFrame frame = new JFrame();

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(scrollPane, BorderLayout.CENTER);
                frame.setSize(500,300);
                frame.setVisible(true);
            }
        });
    }
}

此外,至少put e.printStackTrace()(因为你没有使用任何日志记录框架)在catch块中查看堆栈跟踪,看看是否有一些错误被捕获。