Java 更新jTable-将jTable作为参数传递
我在类a中有一个方法,我希望类B主GUI调用该方法,但类a需要对类B中的jTable执行一些操作 我不希望此方法位于类B中,因为它需要连接到db,并且我不希望我的GUI包含任何此类方法 以下是A类中的代码:Java 更新jTable-将jTable作为参数传递,java,swing,netbeans,jdbc,jtable,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.getP
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类型的参数来设置它的模型。我尝试了所有不同的常用数据类型,如字符串、int等。。。甚至尝试了jTable和TableModel
我猜你真的不应该这么做,但我看不到更好的解决办法了
下面是在B类my GUI中调用此方法的代码:
//table
Account acc = new Account();
acc.populatejTable(datavaultjTable);
我该怎么做呢
我正在使用Netbeans 7.3 Beta 2 GUI builder创建表和GUI—在OS X上用Java编写。类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
}
}
类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
}
}
好的,非常感谢,我想我根本不应该这么做。代码不会为您编译,因为我正在使用在线找到的.jar填充GUI构建器生成的jTables。回到绘图板上!非常感谢您提供的代码示例,我将开始破解。这应该不是私有的TableModel而不是MyTableModel吗?我不想编辑,以防我遗漏了一些东西,但我99%确定..TableModel是一个接口。必须使用此接口的实现。MyTableModel将是一个扩展AbstractTableModel的实现,例如,它将显示产品的实例,并有一个setProducts方法来替换表中显示的产品。好的,非常感谢,我想我根本不应该这样做。代码不会为您编译,因为我正在使用在线找到的.jar填充GUI构建器生成的jTables。回到绘图板上!非常感谢您提供的代码示例,我将开始破解。这应该不是私有的TableModel而不是MyTableModel吗?我不想编辑,以防我遗漏了一些东西,但我99%确定..TableModel是一个接口。必须使用此接口的实现。例如,MyTableModel就是这样一个扩展AbstractTableModel的实现,它将显示Product的实例,并具有一个setProducts方法来替换表中显示的产品。