Как преобразовать объект в JTable в Java

Недавно я начал использовать OpenCSV CSVReader для получения данных из CSV-файла в JTable в java, но я продолжаю получать сообщение об ошибке. DaTroop дал ответ на вопрос, как получить данные из CSV здесь: import csv to JTable. В моем случае я скопировал код

CSVReader reader = new CSVReader(new FileReader("yourfile.csv")); 
List myEntries = reader.readAll();
JTable table = new JTable(myEntries.toArray());

в Netbeans IDE 7.4, но я продолжаю получать сообщение об ошибке «Несовместимые типы — объект не может быть преобразован в TableModel». в

(myEntries.toArray());

Есть идеи?

Спасибо

Как и в комментарии, найдите весь мой фрагмент кода. JFrame работает и просматривается, поэтому его можно назвать прекрасным.

public static void LoadLog() throws FileNotFoundException, IOException {
        LogViewer log = new LogViewer();
        log.setVisible(true);
CSVReader reader = new CSVReader(new FileReader("testog.csv")); 

String[][] rowData = {
    { "A", "B" },
    { "C", "D" }
};

List<String[]> myEntries = reader.readAll();
rowData = myEntries.toArray(new String[0][]);

String[] columnNames = { "Column 1", "Column 2" };

System.out.println(myEntries);

table1 = new JTable(rowData, columnNames);

log.pack();
log.setVisible(true);
    }

person Stiaanvm    schedule 14.07.2014    source источник


Ответы (1)


Во-первых, обратите внимание, что reader.readAll() возвращает List<String[]>.

Также обратите внимание, что вызов myEntries.toArray() возвращает Object[], а не Object[][], а точнее String[][], с которым было бы предпочтительнее работать.

Ближайший конструктор для JTable, который соответствует тому, что вы пытаетесь сделать, будет следующим:

JTable(Object[][] rowData, Object[] columnNames) 

Поэтому вам нужно указать как rowData, так и columnNames. Вы можете получить rowData следующим образом:

List<String[]> myEntries = reader.readAll();
String[][] rowData = myEntries.toArray(new String[0][]);

Создайте переменную для хранения имен столбцов (или не делайте этого по вашему выбору, но имена столбцов по-прежнему необходимы):

String[] columnNames = { "Column 1", "Column 2" };

А затем создайте свой JTable:

JTable table = new JTable(rowData, columnNames);

Основываясь на вашем комментарии, вот короткий и простой фрагмент кода для создания и отображения таблицы. Пока вы инициализируете rowData и columnNames правильными данными, все должно работать нормально.

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

String[][] rowData = {
    { "A", "B" },
    { "C", "D" }
};
String[] columnNames = { "Column 1", "Column 2" };
JTable table = new JTable(rowData, columnNames);
frame.add(new JScrollPane(table));

frame.pack();
frame.setVisible(true);
person sgbj    schedule 14.07.2014
comment
Есть ли дополнительный код для построения таблицы? Это мой окончательный код, и при использовании System.out.pritln я получаю данные, но не вижу никаких данных в своей таблице? - person Stiaanvm; 14.07.2014
comment
Я добавил пример того, как создать и показать таблицу. Если вы не можете заставить свою программу работать после внесения необходимых изменений, вам может потребоваться показать нам больше вашего кода. - person sgbj; 14.07.2014
comment
Где в вашем коде вы добавляете table1 к вашему log/JFrame? - person sgbj; 15.07.2014
comment
Он добавляется с помощью поддона в Netbeans. Табличная переменная переименовывается с помощью свойств. Не могли бы вы предоставить способ добавить его в кадр, не добавляя его с помощью сумматора палитры в Netbeans? - person Stiaanvm; 16.07.2014
comment
Используя ваш код, я понял, что не устанавливаю таблицу моделей. Спасибо за вашу помощь! - person Stiaanvm; 17.07.2014