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は、製品の量を使用してラベル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());
               }
        }

わかりました。これには2つの問題があります。1)ラベルはボタンのsetTextに応答しないため、他のボタンに配置してもラベルは変更されません。2)複数の商品を追加した場合、商品は下から上にしか削除できないため、最後に作成したボタン、次に続くボタンにのみ反応します。

誰もが助けてくれることを願っています!

4

1 に答える 1

1

ポイント2の場合:

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参照のみを保持します。各反復で上書きすると、最後の1つだけが保持されます。

if (event.getSource() == btnDeleteproduct) {

リスナーをチェックインします。

解決策:削除する製品のキーを保持するリスナークラスを作成します。ボタンごとに異なるオブジェクトをインスタンス化し、すべてのボタンに単一のリスナーを使用するのではなく、リスナーとして追加します。

于 2012-12-21T10:55:06.767 に答える