我最近开始使用OpenCSV的CSVReader将CSV文件中的数据传输到java中的JTable,但我一直收到错误。 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);
}
答案 0 :(得分:2)
首先,请注意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);