如何从.csv文件向JTable中的列添加标头

问题描述 投票:0回答:1

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

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

CSV file

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

我的主要课程:

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);
}
}

我的班级CountryList:

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);
    }
}
java swing csv jtable
1个回答
1
投票

您可以读取csv文件并将第一行添加到JTable标头。将以下方法添加到CountryList类:

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;
}

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

© www.soinside.com 2019 - 2024. All rights reserved.