如何使用 OOP 概念将 arraylist 对象设置为 table

how to set arraylist object to table using OOP concept

我在从数据库获取值的方法中创建了一个 OrderModel 对象,并将其设置为 JTable。我想知道如何使用此代码将此创建的对象设置为 JTable

 tblOrderItems.setModel(DbUtils.resultSetToTableModel());

这是我的代码:

private void tblOrderListMouseClicked(java.awt.event.MouseEvent evt) {                                          
      int raw = tblOrderList.getSelectedRow();
      OrderModel or;
      String item;
      Double qty,amount,total;

      ArrayList<OrderModel> arrOrder = new ArrayList<OrderModel>();

      String selectedRaw = tblOrderList.getModel().getValueAt(raw, 0).toString();
      String sql = "select item,qty,amount from orderdetails where orderid='"+selectedRaw+"'";
      con = new DBconnector().connect();
        try {
            ps = con.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            if(rs.next()){
                or = new OrderModel();
                or.setItem(rs.getString("item"));
                or.setQty(rs.getDouble("qty"));
                or.setAmount(rs.getDouble("amount"));
                arrOrder.add(or);

            DefaultTableModel tblModel = new DefaultTableModel();
          // wanted to set ArrayList to table+              
            tblOrderItems.setModel(DbUtils.resultSetToTableModel());

            }


        } catch (Exception e) {
            e.printStackTrace();
        }

    }                           

首先创建您自己的 TableModel,它可以管理您的 OrderModel class,它代表 table...

中的单独一行
public static class OrderTableModel extends AbstractTableModel {

    protected static final String[] COLUMN_NAMES = {"Item", "Qty", "Amount"};
    private List<OrderModel> rows;

    public OrderTableModel(List<OrderModel> rows) {
        this.rows = new ArrayList<>(rows);
    }

    @Override
    public int getRowCount() {
        return rows.size();
    }

    @Override
    public int getColumnCount() {
        return COLUMN_NAMES.length;
    }

    @Override
    public String getColumnName(int column) {
        return COLUMN_NAMES[column];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Object value = null;
        OrderModel row = rows.get(rowIndex);
        switch (columnIndex) {
            case 0:
                value = row.getItem();
                break;
            case 1:
                value = row.getQty();
                break;
            case 2:
                value = row.getAmount();
                break;
        }
        return value;
    }

}

然后你可以使用类似...

private void tblOrderListMouseClicked(java.awt.event.MouseEvent evt) {
    int raw = tblOrderList.getSelectedRow();
    OrderModel or;
    String item;
    Double qty, amount, total;

    ArrayList<OrderModel> arrOrder = new ArrayList<OrderModel>();

    String selectedRaw = tblOrderList.getModel().getValueAt(raw, 0).toString();
    String sql = "select item,qty,amount from orderdetails where orderid=?";
    con = new DBconnector().connect();
    try (PreparedStatement ps = con.prepareStatement(sql)) {
        ps.setString(1, selectedRaw);
        try (ResultSet rs = ps.executeQuery()) {
            while (rs.next()) {
                or = new OrderModel();
                or.setItem(rs.getString("item"));
                or.setQty(rs.getDouble("qty"));
                or.setAmount(rs.getDouble("amount"));
                arrOrder.add(or);
            }
            OrderTableModel model = new OrderTableModel(arrOrder);
            tblOrderItems.setModel(model);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

}

简单地加载 ArrayList 中的项目,然后将其传递给 OrderTableModel 的实例,然后应用于 JTable

查看 How to Use Tables 了解有关使用您自己的自定义模型的更多详细信息。

查看 Using Prepared Statements 以了解有关如何使用 PreparedStatements

的更多详细信息

查看 The try-with-resources Statement 了解有关如何更好地管理数据库(和其他)资源的更多详细信息