产品删除按钮响应不佳

时间:2012-12-21 10:41:42

标签: java swing netbeans jbutton

我在这里制作了一个应用程序并在篮子上工作。

Basket

这是按钮(每次添加产品时都会获得X删除按钮):

for(int i=0;i < products.size(); i++){
            btnDeleteproduct = new JButton("X");
            btnDeleteproduct.setBounds(380, verticalPosition + i * productOffset, 20, 20);
            btnDeleteproduct.setFont(WinkelApplication.FONT_10_BOLD);
            btnDeleteproduct.setName("" + i);
            btnDeleteproduct.addActionListener(this);
            this.add(btnDeleteproduct);
        }

productamount用于设置标签aantal和产品数量:

productamount = (int) WinkelApplication.getBasket().getProductAmount(productdelete);
if (event.getSource() == btnDeleteproduct) {
        productamount--;
        lblamount.setText("" + productamount);
        WinkelApplication.getInstance().showPanel(new view.Payment());
        if (productamount < 1) {
         WinkelApplication.getBasket().deleteProduct(productdelete);
        }
}

现在最后一批是deleteProduct方法:

 public void deleteProduct(Product product) {
            // check if product is allready added to the basket
           if (products.containsKey(product)) {
               products.remove(product);
               WinkelApplication.getInstance().showPanel(new view.Payment());
           }
           if(products.size() == 0){
               WinkelApplication.getInstance().showPanel(new view.CategoryList());
               }
        }

好的,我有两个问题。 1)标签不响应按钮中的setText,因此如果我把它放在另一个按钮中它确实改变它不会改变。 2)如果我添加超过1个产品,我只能从下到上删除产品,所以它只对最后一个按钮做出反应,然后是以下等等。

希望任何人都可以提供帮助!

1 个答案:

答案 0 :(得分:1)

第二点:

for(int i=0;i < products.size(); i++){
        btnDeleteproduct = new JButton("X");
        btnDeleteproduct.setBounds(380, verticalPosition + i * productOffset, 20, 20);
        btnDeleteproduct.setFont(WinkelApplication.FONT_10_BOLD);
        btnDeleteproduct.setName("" + i);
        btnDeleteproduct.addActionListener(this);
        this.add(btnDeleteproduct);
    }

创建删除按钮时,只保留btnDeleteproduct引用。当您在每次迭代中覆盖它时,您只保留

的最后一个
if (event.getSource() == btnDeleteproduct) {

检查你的听众。

解决方案:创建一个侦听器类,其中包含要删除的产品的键。为每个按钮即时化一个不同的对象,并将其添加为侦听器,而不是为所有按钮使用单个侦听器。