0

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

篮子

这是按钮(每次添加产品时都会获得一个 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 是设置产品数量的标签:

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 个产品,我只能从下到上删除产品,所以它只会对最后一个按钮做出反应,然后是下面的按钮,依此类推。

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

4

1 回答 1

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) {

检查你的听众。

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

于 2012-12-21T10:55:06.767 回答