如何从 .csv 文件将 headers 添加到 JTable 中的列

How to add headers to the columns in JTable from .csv file

我想在 .csv 文件的 JTable 列中添加 headers。

你可以在图片上看到我的.csv文件。

我需要删除这段代码: private String[] columnNames = { "Country", "Capital", "Population" }; 而不是它放置了另一个函数,该函数可用于从 .csv 文件中的列名中获取列名。

我的主要 class:

public class App extends JFrame {
private Object[][] data;
private String[] columnNames = { "Country", "Capital", "Population" };
private DefaultTableModel tableModel;
private JTable table;
private CountryList myList;

public App(String title) {
    super(title);
    setBounds(10, 10, 400, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    myList = new CountryList();
    myList.readFromCSV("data/country.csv");
    data = myList.convert2Data();
    tableModel = new DefaultTableModel(data, columnNames);
    table = new JTable(tableModel);
    table.setAutoCreateRowSorter(true);
    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setPreferredSize(new Dimension(380, 280));
    JPanel panel = new JPanel();
    panel.add(scrollPane);
    add(panel, BorderLayout.CENTER);
}

public static void main(String[] args) {
    App myApp = new App("Basic JTable");
    myApp.setVisible(true);
}
}

还有我的 class 国家列表:

public class CountryList {
private ArrayList<Country> books;

public CountryList() {
  books = new ArrayList<Country>();
}

public void add(Country sb) {
    books.add(sb);
}

public void readFromCSV(String filename) {
    File file = new File(filename);
    FileReader reader = null;
    try {
        reader = new FileReader(file);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        System.exit(1);
    }
    BufferedReader infile = new BufferedReader(reader);
    String line = "";
    try {
        boolean done = false;
        while (!done) {
            line = infile.readLine();
            if (line == null) {
                done = true;
            } else {
                String[] tokens = line.trim().split(";");
                String country = tokens[0].trim();
                String capital = tokens[1].trim();
                int population = Integer.parseInt(tokens[2].trim());
                Country sb = new Country(country, capital, population);
                books.add(sb);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
        System.exit(1);
    }
}

您可以读取 csv 文件并将第一行添加到 JTable header。 将以下方法添加到您的 CountryList class:

public String[] getColumnNames(String csvFileDestination){
    BufferedReader br = null;
    String line = "";
    String[] columnNames;

    try {

        br = new BufferedReader(new FileReader(csvFileDestination));
        while ((line = br.readLine()) != null) {

            // use comma as separator
            columnNames = line.split(",");
            break;// Breaking out because you only need the first row

        }
        return columnNames;

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
           try {
               br.close();
            } catch (IOException e) {
               e.printStackTrace();
           }
        }
    }
    return null;
}

并将 private String[] columnNames = { "Country", "Capital", "Population" }; 替换为 private String[] columnNames; 并在构造函数中添加: columnNames = myList.getColumnNames("/path/to/csv/file.csv");