Чтение данных файла в JTable

Вопрос: Я хочу прочитать данные из файла.txt и отправить их в таблицу. Что мне делать? Мой код: public class InsertFileDataToJTable extends AbstractTableModel { Vector data; Vector columns; public InsertFileDataToJTable() { String line; data = new.html Vector(); columns = new Vector(); try { FileInputStream fis = new FileInputStream("student.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fis)); StringTokenizer st1

Вопрос:

Я хочу прочитать данные из файла.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); } }

пожалуйста помоги! Спасибо.

Лучший ответ:

Какую проблему вы получаете в своем коде?

Я запускаю ваш код, и он отлично работал, за исключением того, что имена столбцов будут по умолчанию A, B,… поскольку у вас нет метода для получения имен столбцов из модели. Вы реализовали метод getValueAt() и отлично работали. Просто добавьте новый метод для имен столбцов в вышеприведенном классе:

public String getColumnName(int i){ return (String)columns.get(i); }

Если у вас есть какая-либо другая проблема, тогда дайте ей знать. Я запускаю только 2 столбца, поэтому не проверял метод getValueAt().

Ответ №1

Ну, я просто взял ваш код и скомпилировал его, и все получилось просто отлично. Просто убедитесь, что вы делаете правильный импорт и что входной файл находится на вашем пути. т.е. (“student.txt” должен находиться в той же папке, что и ваш java файл).

JavaDoc говорит это о StringTokenizer

В токенизаторе используется набор разделителей по умолчанию, который является “ tnrf”: символ пробела, символ табуляции, символ новой строки, символ возврата каретки и символ формы.

Поэтому убедитесь, что поля в вашем входном файле используются, поскольку вы используете разделитель по умолчанию.

Я использовал следующий импорт, чтобы заставить его работать

import java.util.*; import javax.swing.*; import javax.swing.table.*; import java.io.*; public class InsertFileDataToJTable extends AbstractTableModel { // the rest of the code is same as yours

}

Ответ №2

Одна из важных проблем, которые я хочу сообщить вам с помощью кода. Вы все написали в таблице. Класс вашей таблицы должен содержать только модель, которая требуется для таблицы, например, column names column count row count, column class getValueAt, методы getValueAt, setValueAt. Создайте отдельный класс для пользовательского интерфейса и создайте таблицу, затем создайте модель и установите модель в таблицу. (Если код является только SSCCE, тогда его хороший, пожалуйста, отделите интерфейс и логику.)

Проблема с этим кодом заключается в том, что если вы реализуете AbstractTableModel вам необходимо реализовать все необходимые методы для таблицы, например, задать имена столбцов, значение параметра, получить значения и т.д. В этом случае имена столбцов не заданы.

Если у вас есть конкретная причина использовать AbstractTableModel тогда это будет хорошо. Else use DefaultTableModel почти все необходимые методы.

Оцените статью
Добавить комментарий