1

我在 A 类中有一个方法,我希望 B 类(主 GUI)调用该方法,但是 A 类需要对 B 类中的 jTable 执行一些操作。

我不希望此方法在 B 类中,因为它需要与数据库的连接,并且我不希望我的 GUI 保存任何此类方法。

这是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 builder 创建表和 GUI - 在 OS X 上用 Java 编写。

4

1 回答 1

4

A 类中的代码无法编译。TableModel中没有setModel()方法。您的目标是在 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 回答