3

カートにアイテムを追加できる Store クラスがあり、カートのアイテム番号と合計金額が増加します。

カートの表示ボタンのようなものもあります。クリックすると、カートのアイテムが表示される別のフレームが表示されます。このカート フレームから [削除] ボタンをクリックすると、前のフレームからカウントと合計金額を減らす予定ですが、合計価格がある jLabel で使用した setText メソッドが機能しません。

カート フレームからこのメソッドを呼び出し、削除ボタンをクリックするたびに削除する価格を渡します

public void updateTotalAmount(double deduct){
    System.out.println("updateTotalAmount - "+deduct);
    tAPriceL.setText(String.valueOf(deduct)); //Total amount price label
    cICountL.setText(String.valueOf(--cICount)); //cart item count label
}

system.out 行は機能する唯一のステートメントであり、残りは機能しません。

このようにコードを交換しようとすると。

public void updateTotalAmount(double deduct){
    tAPriceL.setText(String.valueOf(deduct)); //Total amount price label
    cICountL.setText(String.valueOf(--cICount)); //cart item count label
    System.out.println("updateTotalAmount - "+deduct);
}

system.out が機能しなくなったので、setText 部分に問題があると思います。

どこに問題があるのか​​ わかりません。誰でもこれで私を助けることができますか?

ここにこれの要約があります..メインストアクラスの場合..例私は5000価値のアイテムを持っています

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class NewClass extends JFrame implements ActionListener {

    JLabel tAPrice = new JLabel("5000");
    JButton viewcart = new JButton("view cart");

    public NewClass() {
        this.setLayout(new FlowLayout());
        add(tAPrice);
        add(viewcart);
        viewcart.addActionListener(this);
    }

    public static void main(String[] args) {
        NewClass n = new NewClass();
        n.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        n.setSize(1150, 730);
        n.setVisible(true);
    }

    public void update(double deduct) {
        System.out.println("updated");
        tAPrice.setText(String.valueOf(Double.parseDouble(tAPrice.getText())
            - deduct));
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == viewcart) {
            Cart2 c = new Cart2();
            c.setVisible(true);
            c.setSize(250, 230);
        }
    }
}

そしてカートクラスの場合...たとえば、合計金額から1000を削除したい

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Cart2 extends JFrame implements ActionListener {

    JButton remove = new JButton("remove");

    public Cart2() {
        add(remove);
        remove.addActionListener(this);
    }

    public static void main(String[] args) {
        Cart2 r = new Cart2();
        r.setVisible(true);
        r.setSize(250, 230);
        r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == remove) {
            NewClass nc = new NewClass();
            nc.update(1000);
        }
    }
}
4

4 に答える 4

4

の呼び出しインスタンスを使用する代わりに、newをCart2.actionPerformed()割り当てています。のインスタンスをコンストラクターに渡してみてください。NewClass()NewClassNewClassCart2

例えば:

public class Cart2 extends JFrame implements ActionListener {
    JButton remove = new JButton("remove");
    NewClass newClass;

    public Cart2(NewClass newClass) {
        this.newClass = newClass;
        add(remove);

        remove.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == remove) {
            // NewClass nc = new NewClass();
            newClass.update(1000);
        }
    }

}

次にNewClass

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == viewcart) {
        Cart2 c = new Cart2(this);
        c.setVisible(true);
        c.setSize(250, 230);
    }
}
于 2012-10-24T07:31:29.057 に答える
3
  • 2 つ以上JFramesの を使用しないでください。実行時ではありません。これはトラブルへの道です。

  • これはCardLayoutの仕事です

  • にすべてJComponentsを入れ、として入れたJPanelものJPanelsCards

  • (たぶん)JButtonGUI全体 で1つだけの場所です

于 2012-10-24T07:37:45.980 に答える
2

おそらく最善ではありませんが、これは人々が動けなくなる可能性があり、デバッグの初期テストです。

tAPriceL.paintImmediately(tAPriceL.getVisibleRect());
cICountL.paintImmediately(cICountL.getVisibleRect());

編集:これはそのままにしておきますが、この場合は修正されません。

于 2012-10-24T07:23:34.240 に答える
2

これは、正しい NewClass インスタンスを更新していないためです... Cart2 actionPerformed で、新しい NewClass インスタンスを作成して更新します。

更新するには、NewClass フレーム インスタンスへの参照を保持する必要があります。

于 2012-10-24T07:32:18.950 に答える