ホームページ > Java > &#&チュートリアル > ResultSet から JTable を設定し、IllegalStateException を回避する方法

ResultSet から JTable を設定し、IllegalStateException を回避する方法

Linda Hamilton
リリース: 2024-12-01 05:40:17
オリジナル
136 人が閲覧しました

How to Populate a JTable from a ResultSet and Avoid IllegalStateException?

ResultSet から JTable を設定する

問題の説明

GUI アプリケーション内で、ResultSet から DefaultTableModel を更新するときに、IllegalStateException が発生します。目標は、JTable 内で ResultSet の内容を表示することです。

解決策 1

次のコードは、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));
ログイン後にコピー

ソリューション 2 (SwingWorker を使用)

このソリューションでは、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート