尝试读取文件并将其值添加到JFrame时出现问题

时间:2014-01-27 19:14:41

标签: java swt

尝试从文件存档添加一些值时出现此错误:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

这是我的代码:

    FileReader fr = new FileReader(file);
    BufferedReader br = new BufferedReader(fr);

    while (br.ready()) {

        line = br.readLine();
        st = new StringTokenizer(line, "|");

        JTable table = new JTable();
        table.setModel(new DefaultTableModel(new Object[0][], new String[] { "TEST", "TEST2","TEST3"}));
        chargeTable = (DefaultTableModel)table.getModel();

        while (st.hasMoreElements()) {
            rowData.add(st.nextElement());
        }

        if (!rowData.isEmpty()) {
            tabelaCarregada.addRow(rowData);
            rowData.clear();
        }

    }

    br.close();
    fr.close();

    JFrame jd; 
    jd = new Tabela(chargeTable);
    jd.pack();
    jd.setVisible(true);

我只是在阅读一个文件,然后我正在尝试将文件中的每一行添加到一个表中并将其放在JFrame中。

文件内部是这样的:

示例1 |示例2 |示例3

示例1 |示例2 |示例3

示例1 |示例2 |示例3

示例1 |示例2 |示例3

示例1 |示例2 |示例3

我做错了什么?这个错误让我感到困惑。

感谢您的帮助。

更新:

    FileReader fr = new FileReader(arq);

    BufferedReader br = new BufferedReader(fr);
    String line;
    StringTokenizer st;
    Vector<Object> rowData = new Vector<Object>();

    chargeTable = new DefaultTableModel(new Object[0][], new String[] {"Teste1", "Teste2"});

    while (br.ready()) {
        line = br.readLine();
        st = new StringTokenizer(line, "|");

        while (st.hasMoreElements()) {
            rowData.add(st.nextElement());
        }

        if (!rowData.isEmpty()) {
            chargeTable.addRow(rowData);
            rowData.clear();
        }

    }

    JTable table = new JTable();
    table.setModel(chargeTable);

    br.close();
    fr.close();

    JScrollPane sp = new JScrollPane();
    sp.add(table);

    JFrame jd = new JFrame(); 
    jd.add(sp);
    jd.pack();
    jd.setVisible(true);

1 个答案:

答案 0 :(得分:2)

  1. 您应该在开始读取数据之前创建DefaultTableModel(即在while循环之外)。该模型仅包含列名称。
  2. 然后,对于从文件中读取的每一行数据,您都会创建一个Vector,并将每个令牌从tokenizer添加到Vector。
  3. 然后将Vector添加到DefaultTableModel
  4. 完成处理文件中的所有数据行后,使用DefaultTableModel创建JTable。
  5. 将JTable添加到JScrollPane并将滚动窗格添加到框架中。
  6. 编辑:

    1. 有一个构造函数只用于指定列名(行数为0)。

    2. 您需要为添加到模型的每一行创建一个新行Vector。

    3. 不要使用clear()方法,因为这样会删除刚刚添加的数据。

    4. 您无法将表格添加到滚动窗格。您将表添加到滚动窗格的视口。最简单的方法是在创建滚动窗格时。 JScrollPane scrollPane = new JScrollPane(table);