Bagaimana cara menambahkan ArrayList ke jtable?

Saya telah mengerjakan layanan web yang mengembalikan daftar array. Bagaimana saya bisa menambahkan daftar array yang kembali ke jtable dan menampilkan?

    ArrayList customerDetails = new ArrayList();
    try {
        String sqlQuery = "SELECT * FROM customer WHERE AccountNumber="+accountNumber;
        PreparedStatement stmt = DatabaseConnection.dBconn().prepareStatement(sqlQuery);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {

            customerDetails.add(rs.getString("Name"));
            customerDetails.add(rs.getString("DoB"));
            customerDetails.add(rs.getString("Address"));
            customerDetails.add(rs.getString("Mobile"));
            customerDetails.add(rs.getString("Email"));
            customerDetails.add(rs.getString("AccountType"));
            customerDetails.add(rs.getString("AccountNumber"));
            customerDetails.add(rs.getString("SortCode"));
            customerDetails.add(rs.getString("Balance"));
            customerDetails.add(rs.getString("Card"));

        }
        return customerDetails;

    } catch (SQLException err) {
        System.out.println(err.getMessage());
    }
    return customerDetails;

person Lakshan    schedule 22.04.2017    source sumber
comment
Mari kita mulai dengan fakta bahwa ArrayList Anda tidak terstruktur sebagai pengelompokan baris/kolom, Anda memerlukan List di dalam List, dengan daftar terluar adalah baris dan daftar dalam adalah nilai kolom   -  person MadProgrammer    schedule 22.04.2017
comment
Masalah Anda adalah menambahkan ArrayList ke JTable, jadi coba solusi ini   -  person TuyenNTA    schedule 22.04.2017
comment
I've been working on a web-service that returns an arraylist. - mengapa ia mengembalikan ArrayList? Jika Anda mendapatkan semua data dari database mengapa tidak mengembalikan DefaultTableModel yang berisi semua data saja. Kemudian Anda tinggal membuat JTable menggunakan model tabel.   -  person camickr    schedule 22.04.2017


Jawaban (1)


Mari kita mulai dengan fakta bahwa ArrayList Anda tidak terstruktur sebagai pengelompokan baris/kolom, Anda memerlukan List di dalam List, dengan daftar terluar adalah baris dan daftar dalam adalah nilai kolom

Selagi kita melakukannya, mari manfaatkan juga PreparedStatement dengan baik dan kelola sumber daya agar ditutup dengan benar saat kita melakukannya

ArrayList<List<String>> customerDetails = new ArrayList<>(25);
String sqlQuery = "SELECT * FROM customer WHERE AccountNumber=?";
try (PreparedStatement stmt = DatabaseConnection.dBconn().prepareStatement(sqlQuery)) {
    stmt.setString(1, accountNumber);
    try (ResultSet rs = stmt.executeQuery()) {

        while (rs.next()) {
            List<String> rowDetails = new ArrayList<>(10);
            rowDetails.add(rs.getString("Name"));
            rowDetails.add(rs.getString("DoB"));
            rowDetails.add(rs.getString("Address"));
            rowDetails.add(rs.getString("Mobile"));
            rowDetails.add(rs.getString("Email"));
            rowDetails.add(rs.getString("AccountType"));
            rowDetails.add(rs.getString("AccountNumber"));
            rowDetails.add(rs.getString("SortCode"));
            rowDetails.add(rs.getString("Balance"));
            rowDetails.add(rs.getString("Card"));

            customerDetails.add(rowDetails);
        }
    }

} catch (SQLException err) {
    System.out.println(err.getMessage());
}
return customerDetails;

Lihat Menggunakan Pernyataan yang Disiapkan dan Pernyataan try-with-resources untuk detail lebih lanjut

Sekarang, kita memerlukan TableModel yang dapat mendukungnya, pada tingkat paling dasar...

public class ListTableModel extends AbstractTableModel {

    private List<List<String>> rows;
    private List<String> columnNames;

    public ListTableModel(List<String> columnNames, List<List<String>> rows) {
        this.rows = new ArrayList<>(rows);
        this.columnNames = columnNames;
    }

    @Override
    public int getRowCount() {
        return rows.size();
    }

    @Override
    public int getColumnCount() {
        return columnNames.size();
    }

    @Override
    public String getColumnName(int column) {
        return columnNames.get(column);
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        Class type = String.class;
        return type;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        List<String> rowData = rows.get(rowIndex);
        return rowData.get(columnIndex);
    }
}

Ini membutuhkan List untuk nama kolom dan List<List> untuk data baris.

Secara pribadi, saya lebih suka untuk membungkus data ke dalam semacam Objek Java Lama Biasa (POJO) karena ia merangkum data dan memberikan fleksibilitas yang lebih besar saat menampilkannya (yaitu, saya perlu menampilkan semua properti objek jika saya tidak melakukannya). tidak mau)

Lihat Cara Menggunakan Tabel untuk detail lebih lanjut

person MadProgrammer    schedule 22.04.2017