Получавам тази грешка, когато се опитвам да добавя някои стойности от архивите на файлове:
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.
Вътре във файла е така:
example1 | example2 | ПРИМЕР 3
example1 | example2 | ПРИМЕР 3
example1 | example2 | ПРИМЕР 3
example1 | example2 | ПРИМЕР 3
example1 | example2 | ПРИМЕР 3
Това, което правя погрешно? Тази грешка ме обърква.
Благодаря за помощта.
UPDATE:
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);
Отговори:
2 за отговор № 1- Трябва да създадете DefaultTableModel, преди да започнете да четете данните си (т.е. извън цикъла while). Моделът ще съдържа само имената на колоните.
- След това за всеки ред данни, който четете от файла, създавате вектор и добавяте всеки токен от токенатора към вектор.
- След това добавяте Vector към DefaultTableModel
- Когато приключите с обработката на всички данни във файла, създавате JTable използвайки DefaultTableModel.
- Добавяте JTable към JScrollPane и добавяте скрола на рамката.
Редактиране:
Съществува конструктор, който просто посочва имената на колоните (с 0 ред).
Трябва да създадете нов вектор на ред за всеки ред, който добавите към модела.
Не използвайте метода clear (), тъй като това ще премахне току-що добавените данни.
Не можете да добавите таблицата към скролпана. Добавяте таблицата към екрана на екрана за скролване. Най-лесният начин да направите това е, когато създавате Scrollpane.
JScrollPane scrollPane = new JScrollPane(table);