1

クラス A にメソッドがあり、クラス B (メイン GUI) でそのメソッドを呼び出したいのですが、クラス A はクラス B 内の jTable に対して何らかのアクションを実行する必要があります。

データベースへの接続が必要であり、GUI にそのようなメソッドを保持させたくないため、このメソッドをクラス B 内に配置したくありません。

クラス A 内のコードは次のとおりです。

public void populatejTable(TableModel x) {
    try {
        String stmt = "SELECT * FROM APP.DATAVAULT";
        PreparedStatement ps = Main.getPreparedStatement(stmt);
        ResultSet rs = ps.executeQuery();
        x.setModel(DbUtils.resultSetToTableModel(rs));
        ps.close();
        rs.close();
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
}

モデルを設定するには、タイプ jTable のパラメーターを渡す必要があります。String、int などのさまざまな一般的なデータ型をすべて試し、jTable と TableModel も試しました。

あなたは本当にこれを行うべきではないと思いますが、これを回避するより良い方法がわかりませんか?

クラスB(私のGUI)内でこのメソッドを呼び出すコードは次のとおりです。

//table
Account acc = new Account();
acc.populatejTable(datavaultjTable);

これを行うにはどうすればよいですか?

私は Netbeans 7.3 Beta 2 GUI ビルダーを使用してテーブルと GUI を作成しています - OS X で Java を使用しています。

4

1 に答える 1

4

クラス A のコードはコンパイルされません。setModel()TableModel にはメソッドがありません。GUI クラスにデータベース関連のコードを持たないという目標は良いものですが、データベース関連のコードに GUI コードが含まれる場合、結果はさらに悪化します。

GUI クラスには、GUI コードのみを含める必要があります。データ アクセス コードには、データベース関連のコードのみを含める必要があります。GUI は、データベース アクセス コードのメソッドを呼び出してデータを取得する必要があります。JTable インスタンスや TableModel インスタンスをデータ アクセス コードに渡すべきではありません。

public class GUI {
    private JTable table;
    private MyTableModel tableModel;
    private DataAccess dataAccess;
    ...

    public void fillTableWithDataFromDatabase() {
        List<Product> products = dataAccess.getProductsFromDatabase();
        tableModel.setProducts(products);
    }
}

public class DataAccess {
    public List<Product> getProductsFromDatabase() {
        // TODO:
        // create an empty list
        // execute a query
        // loop through each row
        // for each row, create a Product instance and add it to a list
        // return the list
    }
}
于 2013-02-23T14:51:55.307 に答える