我在这里制作了一个应用程序并在篮子上工作。
这是按钮(每次添加产品时都会获得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个产品,我只能从下到上删除产品,所以它只对最后一个按钮做出反应,然后是以下等等。
希望任何人都可以提供帮助!
答案 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) {
检查你的听众。
解决方案:创建一个侦听器类,其中包含要删除的产品的键。为每个按钮即时化一个不同的对象,并将其添加为侦听器,而不是为所有按钮使用单个侦听器。