Rumah >Java >javaTutorial >Bagaimana untuk Mengisi JTable dari ResultSet dan Elakkan IllegalStateException?
Dalam aplikasi GUI, pengguna menghadapi IllegalStateException semasa mengemas kini DefaultTableModel daripada ResultSet. Matlamatnya ialah untuk memaparkan kandungan ResultSet dalam JTable.
Kod berikut menyediakan kaedah mudah untuk mencipta DefaultTableModel daripada ResultSet:
public static DefaultTableModel buildTableModel(ResultSet rs) throws SQLException { ResultSetMetaData metaData = rs.getMetaData(); // Column names Vector<String> columnNames = new Vector<>(); int columnCount = metaData.getColumnCount(); for (int column = 1; column <= columnCount; column++) { columnNames.add(metaData.getColumnName(column)); } // Table data Vector<Vector<Object>> data = new Vector<>(); while (rs.next()) { Vector<Object> vector = new Vector<>(); for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) { vector.add(rs.getObject(columnIndex)); } data.add(vector); } return new DefaultTableModel(data, columnNames); }
Menggunakan kaedah ini, jadual boleh dibina sebagai berikut:
JTable table = new JTable(buildTableModel(rs));
Penyelesaian ini menggunakan SwingWorker untuk melaksanakan pemuatan data dalam urutan yang berasingan, meningkatkan responsif UI. Ia juga menggunakan pernyataan cuba-dengan-sumber untuk pengurusan sumber yang lebih baik:
public class GUI extends JFrame { // ... private void loadData() { button.setEnabled(false); try (Connection conn = DriverManager.getConnection(url, usr, pwd); Statement stmt = conn.createStatement()) { ResultSet rs = stmt.executeQuery("select * from customer"); ResultSetMetaData metaData = rs.getMetaData(); // ... while (rs.next()) { // ... } tableModel.setDataVector(data, columnNames); } catch (Exception e) { // ... } button.setEnabled(true); } }
Atas ialah kandungan terperinci Bagaimana untuk Mengisi JTable dari ResultSet dan Elakkan IllegalStateException?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!