为什么我们在将值设置为JTabel时扩展AbstractTabelModel?

时间:2015-09-22 08:05:44

标签: java swing oop

我正在开发一个用于订购系统的应用程序,我必须将数据设置为JTabels。 这段代码成功运作。我想知道这堂课有什么重要性和意义? 为什么我们需要导入AbstractTabelModel.class?

OrderTabelModel类: -

  public class OrderTableModel extends AbstractTableModel{
    protected static final String[] COLUMN_NAMES={"Item","Qty","Amount"};
       private List<Order> rows;

    public OrderTableModel(List<Order> 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;
            Order 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();
      Order or;
      String item;
      Double qty,amount,total;

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

      String selectedRaw = tblOrderList.getModel().getValueAt(raw, 0).toString();
      System.out.println("order id : "+selectedRaw);
      String sql = "select item,qty,amount from orderdetails where orderid='"+selectedRaw+"'";
      con = new DBconnector().connect();
        try {
            Statement   ps =con.createStatement();
            ResultSet rs2 = ps.executeQuery(sql);
           while(rs2.next()){
                or = new Order();
                or.setItem(rs2.getString("item"));
                System.out.println("Item :" +rs2.getString("item"));
                or.setQty(rs2.getDouble("qty"));
                or.setAmount(rs2.getDouble("amount"));

                arrOrder.add(or);
            }
            rs2.close();
            ps.close();
            OrderTableModel tblModel = new OrderTableModel(arrOrder);          
            tblOrderItems.setModel(tblModel);


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

    }                                         

有人能解释一下这个过程吗?

1 个答案:

答案 0 :(得分:1)

扩展AbstractTableModel并非总是必须的。您可以简单地扩展DefaultTableModel并仅在必要时覆盖getValueAt()方法。

但是大部分时间用于简单的使用,甚至不需要覆盖getValueAt()方法。

通过使用DefaultTableModel,您将数据(从数据库导入)转换为可能有点无聊的object[][]Vector类型的限制。

但您问过使用AbstractTabelModel的重要性是什么?

在这种情况下,我可以说当JTable开始呈现时,它需要确定行数和列数,还需要知道每个单元格中应该重新插入哪些数据等等上。基于此,JTable从基础TableModel请求此信息。因此,TableModel(TableModel的任何子项或实现)需要JTable使用的那些方法来检索所需的信息。

希望这会有所帮助。

祝你好运。