我正在构建一个包含从csv工作表导入的值的表。我有95行和26列。我想显示JTable中的所有"dataS"值,但我只得到了第一列。
我存储数据值的方式有什么问题吗?
谢谢!
import java.awt.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import javax.swing.*;
public class mealBuilder {
public static void main(String[] args) throws FileNotFoundException {
File myObj = new File("NutrData.csv");
Scanner myReader = new Scanner(myObj);
ArrayList<String[]> records = new ArrayList<String[]>();
String[] record = new String[2];
while (myReader.hasNextLine()) {
record = myReader.nextLine().split(",");
records.add(record);
}
String[] columnNames = new String[]{Arrays.toString(records.get(0))}
Object[][] dataS = new Object[records.size()][records.get(0).length];
for (int i = 0; i < records.size() - 1; i++) {
for (int j = 0; j < records.get(0).length - 1; j++) {
dataS[i][j] = records.get(i)[j];
}
}
JFrame frame = new JFrame("Meal-Builder");
JPanel panel = new JPanel(new BorderLayout());
JTable foodMenu = new JTable();
foodMenu = new JTable(dataS, columnNames);
JScrollPane scroll = new JScrollPane(foodMenu, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setSize(1400, 900);
panel.setSize(700, 400);
panel.setLocation(25, 25);
foodMenu.setPreferredScrollableViewportSize(new Dimension(600, 400));
frame.add(panel);
panel.add(scroll, BorderLayout.CENTER);
frame.setVisible(true);
}
}
1条答案
按热度按时间aurhwmvo1#
苏,两个核心问题。
首先...
创建一个包含单个元素的数组,该数组是
records.get(0)
中所有元素的连接结果它应该是简单的...
第二...
首先,您包含了结果的第一行,它实际上是头值,而在两个循环中,您排除了最后一个元素(
i < records.size() - 1
)应该更像是...
补充...
frame.setLayout(null);
没有给您带来任何好处,事实上,它给您带来了很多伤害。事实上,我不明白为什么要使用第二个
JPanel
来包含JScrollPane
,整个事情可能会简化为...