我正在开发一个用于订购系统的应用程序,我必须将数据设置为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();
}
}
有人能解释一下这个过程吗?
答案 0 :(得分:1)
扩展AbstractTableModel
并非总是必须的。您可以简单地扩展DefaultTableModel
并仅在必要时覆盖getValueAt()
方法。
但是大部分时间用于简单的使用,甚至不需要覆盖getValueAt()
方法。
通过使用DefaultTableModel,您将数据(从数据库导入)转换为可能有点无聊的object[][]
或Vector
类型的限制。
但您问过使用AbstractTabelModel
的重要性是什么?
在这种情况下,我可以说当JTable
开始呈现时,它需要确定行数和列数,还需要知道每个单元格中应该重新插入哪些数据等等上。基于此,JTable
从基础TableModel
请求此信息。因此,TableModel(TableModel的任何子项或实现)需要JTable
使用的那些方法来检索所需的信息。
希望这会有所帮助。
祝你好运。