Java 如何在jTable顶部显示最后添加的行

Java 如何在jTable顶部显示最后添加的行,java,swing,jtable,Java,Swing,Jtable,您好,我有一个问题,我想知道是否有办法在运行时将最后添加的行显示在jTable的顶部我更新了select语句“select*FROM table ORDER BY ID DESC”,它填充了我的表,但最近添加的行显示在表的底部,直到我关闭程序并再次打开它,然后它显示在顶部 TableItemsModel: public class TableItemsModel extends AbstractTableModel{ ItemsDao itemDao = new ItemsDa

您好,我有一个问题,我想知道是否有办法在运行时将最后添加的行显示在jTable的顶部我更新了select语句“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);
    }  
}

首先,为什么要调用自定义对象
。那是复数。对象应使用单数形式的名称。因此,更好的名称应该是
Item
,甚至可能是
Product
,因为在所有方法名称中都使用“Product”。保持一致

你能告诉我如何将insertRow方法包含到我的代码中吗

您正在使用
列表
保存数据。阅读
列表
API,您将看到有两种
add(…)
方法。一种方法在
列表的末尾添加元素,另一种方法在
列表的指定索引处插入元素

因此,要在
列表的开头添加一个项目,您需要指定0作为索引

要执行此操作,请复制addRow(…)方法的逻辑,但需要两个参数:

public void insertRow(int index, Item item)
然后将方法中的逻辑更改为:

  • 在列表的指定索引处插入项目
  • 在指定索引处调用fireTableRowsInserted(..)方法

  • 通过传递索引,可以使方法非常灵活。您可以在开始或中间插入项目(如果需要)。但是最近添加的行显示在表的底部-使用您的Debug TabrMuldOL的“代码”> INSERTROW(…)/代码>方法在Top.PultAudioAdDRW(项目项)中插入行。}这是一种添加行并更新表的方法。我怎么做?更新:添加了完整的代码,您能告诉我如何将insertRow方法包含到我的代码中吗?它很有效,谢谢
    public void insertRow(int index, Item item)