从.txt文件填充JTable

时间:2016-12-12 13:51:25

标签: java swing jtable

我之前已经知道类似的问题了,而且我已经浏览了几乎所有这些问题,但我仍然无法通过从文件加载数据来填充我的JTable(来自.txt文件) )。

我保存文件的方式是每个列的信息用" |"分隔。所以你明白了:

名字|姓| ID | LandPhone |手机|

例如,你得到这个: 李四|约翰| 1248234834 | 021324234234 | 0732553535 | DOE |简| 1492349324 | 021432434325 | 0735345345 |

等等。我用来打开.txt文件的代码是:

private void deschideMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                                 
    JFileChooser jfc = new JFileChooser();
    String line = null;
    DefaultTableModel dtm =  (DefaultTableModel) table.getModel();

    FileFilter filter = new FileNameExtensionFilter("Fisiere text","txt");
    jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
    jfc.setMultiSelectionEnabled(false);
    jfc.setDialogTitle("Deschideti un tabel...");
    jfc.setFileFilter(filter);        
    if(jfc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
        File file = jfc.getSelectedFile();

        try {
        BufferedReader br = new BufferedReader(new FileReader(file));

        while ((line = br.readLine()) != null) {
            Vector data= new Vector();
            StringTokenizer st1 = new StringTokenizer(line,"|");

            while (st1.hasMoreTokens()) {
                String nextToken = st1.nextToken();
                data.add(nextToken);

            }
            System.out.println(data);
            dtm.addRow(data);
        }

        br.close();

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

    } 

}

问题是,我总是收到此错误:

java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
    at java.util.Vector.elementAt(Vector.java:474)
    at javax.swing.table.DefaultTableModel.justifyRows(DefaultTableModel.java:265)
    at javax.swing.table.DefaultTableModel.insertRow(DefaultTableModel.java:375)
    at javax.swing.table.DefaultTableModel.addRow(DefaultTableModel.java:350)

如果我使用打印方法查看我得到的内容,我总是先找到第一行,然后崩溃。它永远不会到达第二行。你怎么强迫它去第二行?什么是0> = 0异常?根据我从与.txt文件中填充JTable相关的其他主题的理解,它与不了解列数的模型有关吗?

这令人非常困惑。我一直想知道为什么它必须在编程,一切和任何事情上如此复杂,但这只是一个修辞问题。

0 个答案:

没有答案