我在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编写。
答案 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
}
}