【发布时间】:2021-01-26 00:59:17
【问题描述】:
您好,当我使用 popupMenu(右键单击按钮)通过表从数据库中删除产品时,该行仍然显示在表列表中,insertProduct 方法工作正常并将该行插入到表中,但 removeProduct 方法没有你能告诉我代码中的问题在哪里吗?
ProductTable.java:
public class ProductTable extends AbstractTableModel {
ProductsDao pd = new ProductsDao();
private final List<Products> products;
public ProductTable() throws Exception {
this.patients = (ArrayList<Products>) pd.getProductsList();
}
private String[] columnNames = {"PRODUCT NAME", "PRODUCT CATEGORY", "PRODUCT PRICE"};
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public int getRowCount() {
return products.size();
}
@Override
public Object getValueAt(int row, int column) {
Products p = products.get(row);
switch (column)
{
case 0: return p.getProductName();
case 1: return p.getProductCategory();
case 2: return p.getProductPrice();
}
}
@Override
public void setValueAt(Object value, int row, int column) {
Products p = products.get(row);
switch (column) {
case 0: p.setProductName((String)value); break;
case 1: p.setProductCategory((Date)value); break;
case 2: p.setProductPrice((int)value); break;
}
fireTableCellUpdated(row, column);
}
public Products getProduct(int row) {
return products.get(row);
}
public void addProduct(Products p) {
insertProduct(getRowCount(), p);
}
public void insertProduct(int row, Products p) {
products.add(row, p);
fireTableRowsInserted(row, row);
}
public void deleteProduct(Products p) {
removeProduct(getRowCount(), p);
}
public void removeProduct(int row, Products p) {
products.remove(row);
fireTableRowsDeleted(row, row);
}
}
JFrame:
public void popupTable() {
JPopupMenu popupMenu = new JPopupMenu();
JMenuItem menuItem1 = new JMenuItem("Delete", new ImageIcon(getClass().getResource("")));
menuItem1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int row = jTable1.getSelectedRow();
String cell = jTable1.getModel().getValueAt(row, 0).toString();
Products p = new Products();
p.setId(cell);
try {
int count = ProductsDao.getInstance().delete(p);
if (count == 1) {
removeRowFromTable(p);
JOptionPane.showMessageDialog(null, "Deleted");
} else {
JOptionPane.showMessageDialog(null, "Faild");
}
} catch (Exception ex) {
Logger.getLogger(AddNewPatient.class.getName()).log(Level.SEVERE, null, ex);
}
});
popupMenu.add(menuItem1);
jTable1.setComponentPopupMenu(popupMenu);
}
public static void removeRowFromTable(Products data) {
ProductTable t = (ProductTable) jTable1.getModel();
t.deleteProduct(data);
}
ProductsDao.java:
@Override
public List<Products> getProductsList() throws Exception {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList<Products> products = new ArrayList<Products>();
try {
con = getConnection();
String sql = "SELECT * FROM products ORDER BY PRODUCT_ID DESC";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Products product = new Products();
product.setProductName(rs.getString("PRODUCT_NAME"));
product.setProductCategory(rs.getString("PRODUCT_CATEGORY"));
product.setProductPrice(rs.getInt("PRODUCT_PRICE"));
products.add(product);
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
} finally {
rs.close();
ps.close();
closeConnection(con);
}
return products;
}
【问题讨论】:
-
(1-) 从下面的答案:... Products 对象(应该重命名为 Product -- 单数) - 你是鉴于您在上一个问题中的建议:stackoverflow.com/a/65765970/131872。我们不应该花时间重复建议。
-
你好 camickr 我已经把它改成了单数 谢谢你上次的帮助