GUI 애플리케이션 내에서 ResultSet에서 DefaultTableModel을 업데이트할 때 사용자에게 IllegalStateException이 발생합니다. 목표는 JTable 내에 ResultSet의 내용을 표시하는 것입니다.
다음 코드는 ResultSet에서 DefaultTableModel을 생성하는 간단한 방법을 제공합니다.
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); }
이 방법을 활용하면 테이블은 다음과 같이 구성될 수 있습니다. 다음은 다음과 같습니다.
JTable table = new JTable(buildTableModel(rs));
이 솔루션은 SwingWorker를 사용하여 별도의 스레드에서 데이터 로딩을 수행하여 UI 응답성을 향상시킵니다. 또한 향상된 리소스 관리를 위해 try-with-resources 문을 활용합니다.
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); } }
위 내용은 ResultSet에서 JTable을 채우고 IllegalStateException을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!