更新jTable - 将jTable作为参数传递

时间:2013-02-23 14:38:08

标签: java swing netbeans jdbc jtable

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

我不希望这个方法在B类中,因为它需要连接到db,我不希望我的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构建器来创建表和GUI - 在OS X上用Java编写。

1 个答案:

答案 0 :(得分: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
    }
}