如何在 jTable 的顶部显示最后添加的行
how to display the last added row in the top of the jTable
你好我有一个问题我想知道是否有办法在运行时在 jTable 顶部显示最后添加的行我更新了 select 语句“SELECT * FROM table ORDER BY ID DESC" 填充了我的 table 但最近添加的行显示在 table 的底部,直到我关闭程序并再次打开它然后它显示在顶部
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”。保持一致。
can you tell me how to include the method insertRow into my code please
您正在使用 List
来保存数据。阅读 List
API 你会发现有两个 add(...)
方法。一种方法在 List
的末尾添加元素,另一种方法在 List
.
的指定索引处插入元素
因此,要在 List
的开头添加项目,您需要将 0 指定为索引。
为此,您需要复制 addRow(...) 方法的逻辑,但您需要两个参数:
public void insertRow(int index, Item item)
然后你把方法里的逻辑改成:
- 在列表的指定索引处插入项目。
- 在指定索引处调用 fireTableRowsInserted(..) 方法。
通过传入索引,您可以使该方法非常灵活。您可以在开头或中间插入项目(如果需要)。
你好我有一个问题我想知道是否有办法在运行时在 jTable 顶部显示最后添加的行我更新了 select 语句“SELECT * FROM table ORDER BY ID DESC" 填充了我的 table 但最近添加的行显示在 table 的底部,直到我关闭程序并再次打开它然后它显示在顶部
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”。保持一致。
can you tell me how to include the method insertRow into my code please
您正在使用 List
来保存数据。阅读 List
API 你会发现有两个 add(...)
方法。一种方法在 List
的末尾添加元素,另一种方法在 List
.
因此,要在 List
的开头添加项目,您需要将 0 指定为索引。
为此,您需要复制 addRow(...) 方法的逻辑,但您需要两个参数:
public void insertRow(int index, Item item)
然后你把方法里的逻辑改成:
- 在列表的指定索引处插入项目。
- 在指定索引处调用 fireTableRowsInserted(..) 方法。
通过传入索引,您可以使该方法非常灵活。您可以在开头或中间插入项目(如果需要)。