问题描述
您好,我有一个问题,我想知道是否有办法在运行时在 jTable 顶部显示最后添加的行 我更新了填充我的表的选择语句“SELECT * FROM table ORDER BY ID DESC”,但是最近添加的行显示在表格底部,直到我关闭程序并再次打开它然后它显示在顶部
TableItemsModel:
public class TableItemsModel extends AbstractTableModel{
ItemsDao itemDao = new ItemsDao();
private List<Items> items;
public TableItemsModel() throws Exception {
this.items = (ArrayList<Items>)itemDao.getItemsList();
}
private DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
@Override
public int getRowCount() {
return items.size();
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public Object getValueAt(int rowIndex,int columnIndex) {
Items item = items.get(rowIndex);
switch(columnIndex){
case 0: return p.getProductName();
case 1: return p.getProductCategory();
case 2: return p.getProductPrice();
default: return "";
}
}
public String getColumnName(int column){
switch(column){
case 0: return "PRODUCT NAME";
case 1: return "PRODUCT CATEGORY";
case 2: return "PRICE";
default: return "";
}
}
public void addRow(Items item){
items.add(item);
fireTableRowsInserted(items.size()-1,items.size()-1);
}
public void deleteRow(Items item){
items.remove(item);
fireTableRowsInserted(items.size()-1,items.size()-1);
}
}
jFrame:
private final TableItemsModel model;
public Products() throws Exception {
this.model = new TableItemsModel();
private void btnAddItemActionPerformed(java.awt.event.ActionEvent evt) {
String productName = txtProductName.getText();
String productCategory = txtProductCategory.getText();
int productPrice = Integer.valueOf(txtPrice.getText());
try {
int count = ItemsDao.getInstance().insert(itemDao);
if (count == 1) {
model.addRow(Items);
JOptionPane.showMessageDialog(null,"item successfully added");
} else {
JOptionPane.showMessageDialog(null,"Cannot Add Item");
}
} catch (Exception ex) {
Logger.getLogger(AddNewPatient.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
解决方法
首先,为什么要调用自定义对象 Items
。那是复数。对象应该被赋予名称的单数形式。因此,更好的名称应该是 Item
甚至 Product
,因为您在所有方法名称中都使用了“product”。保持一致。
你能告诉我如何在我的代码中包含方法 insertRow
您正在使用 List
来保存数据。阅读 List
API,您会看到有两个 add(...)
方法。一种方法在 List
的末尾添加元素,另一种方法在 List
的指定索引处插入元素。
因此要在 List
的开头添加一个 Item,您需要指定 0 作为索引。
为此,您复制 addRow(...) 方法的逻辑,但需要两个参数:
public void insertRow(int index,Item item)
然后你把方法中的逻辑改成:
- 在列表的指定索引处插入项目。
- 在指定的索引处调用 fireTableRowsInserted(..) 方法。
通过传入索引,您可以使该方法非常灵活。您可以在开头或中间插入一个 Item(如果需要)。