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

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

我在类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类型的参数来设置它的模型。我尝试了所有不同的常用数据类型,如字符串、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方法来替换表中显示的产品。