-1
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pbl2;


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JFrame;


public class Main
{


    public static void main(String[] args) {
         JFrame f = new JFrame("WELCOME TO ULEQ MAYANG CAFE");
         f.setSize(1200, 500);
         f.setLocation(0, 0);
         f.addWindowListener(new WindowAdapter( ){

         @Override
         public void windowClosing(WindowEvent we){System.exit(0);}

      });

      JPanel entreePanel = new JPanel();
      final ButtonGroup entreeGroup = new ButtonGroup();
      JRadioButton radioButton;
      System.out.print("Please Select Your Food : \n\n");

      entreePanel.add(radioButton = new JRadioButton("Uleq Fried Chicken(2 Pieces) = RM6.00"));
      radioButton.setActionCommand("Uleq Fried Chicken(2 Pieces) = RM6.00");
      entreeGroup.add(radioButton);
      entreePanel.add(radioButton = new JRadioButton("Uleq Fried Chicken(5Pieces) = RM15.00"));
      radioButton.setActionCommand("Uleq Fried Chicken(5Pieces) = RM15.00");
      entreeGroup.add(radioButton);
      entreePanel.add(radioButton = new JRadioButton("Panera Bread = RM3.00"));
      radioButton.setActionCommand("Panera Bread = RM3.00");
      entreeGroup.add(radioButton);
      entreePanel.add(radioButton = new JRadioButton("Hoka Hoka Bento = RM4.50"));
      radioButton.setActionCommand("Hoka Hoka Bento = RM4.50");
      entreePanel.add(radioButton = new JRadioButton("Special Uleq Burger = RM6.00"));
      radioButton.setActionCommand("Special Uleq Burger = RM6.00");
      entreeGroup.add(radioButton);

      final JPanel condimentsPanel = new JPanel();
      condimentsPanel.add(new JCheckBox("Orange Pulpy = RM3.80"));
      condimentsPanel.add(new JCheckBox("Coca Cola = RM2.50"));
      condimentsPanel.add(new JCheckBox("Pepsi = RM2.50"));
      condimentsPanel.add(new JCheckBox("Mineral Water = RM1.00"));
      condimentsPanel.add(new JCheckBox("Special Uleq Latte = RM3.50"));
      condimentsPanel.add(new JCheckBox("Ribena = RM2.00"));
      condimentsPanel.add(new JCheckBox("Mango Juice = RM3.00"));

      JPanel orderPanel = new JPanel( );
         JButton orderButton = new JButton("THANK YOU FOR PURCHASING AT ULEQ MAYANG CAFE,PLEASE CLICK AND WE WILL PROCEED YOUR ORDER");
           orderPanel.add(orderButton);

    Container content = f.getContentPane( );
    content.setLayout(new GridLayout(3, 1));
    content.add(entreePanel);

    content.add(condimentsPanel);
    content.add(orderPanel);


    orderButton.addActionListener(new ActionListener( ) {
    public void actionPerformed(ActionEvent ae) {
    String entree =
    entreeGroup.getSelection().getActionCommand( );
    System.out.println(entree + " ");
    Component[] components = condimentsPanel.getComponents( );
    for (int i = 0; i < components.length; i++) {
    JCheckBox cb = (JCheckBox)components[i];
    if (cb.isSelected( ))
    System.out.println("Drinks order:" + cb.getText( ));
}
}
});

f.setVisible(true);


}

}

//** 助けてください!!!!*// 価格を計算したいのですがわかりません.. 私はJavaについて愚かです.. そして、「食べ物の注文」と「飲み物の注文」はウィンドウではなく、ネットビーンでの出力..私の壊れた英語で申し訳ありません。

4

1 に答える 1

2

問題を分解する必要があります。

注文に追加できるアイテムがいくつかあります。ある時点で、その注文の合計を計算する必要があります。

アイテムには説明と価格があります。

注文には 0 個以上のアイテムが含まれる場合があります。

基本的に、これらの要素をモデル化する何らかの方法が必要です。アイテムを表す UI 要素がクリックされたら、それを注文に追加または削除する必要があります。

ユーザーがボタンをクリックすると、注文に合計を計算するように依頼する必要があります。

これが、モデル、ビュー、コントロール パラダイムの基本概念です。

一連のコントロールをウィンドウにダンプする代わりに、これらの個別の要素を何らかの方法でモデル化し、それを表す UI を作成する必要があります。

モデルから始めましょう...

// The order, which holds a series of items...
// You should be able to see getTally method :D
public class Order {

    private List<Item> items;

    public Order() {
        items = new ArrayList<>(25);
    }

    public void add(Item item) {
        items.add(item);
    }

    public void remove(Item item) {
        items.remove(item);
    }

    public double getTally() {

        double tally = 0;
        for (Item item : items) {
            tally += item.getPrice();
        }

        return tally;

    }

}

// A basic item, which has a description and a price...
public class Item {

    private String text;
    private double price;

    public Item(String text, double price) {
        this.text = text;
        this.price = price;
    }

    public String getText() {
        return text;
    }

    public double getPrice() {
        return price;
    }

}

次に、これを画面にモデル化する方法が必要です...さて、繰り返されるコードが非常に多いため、一連の方法を作成して、作業を簡単にします...

// Formats the item for the display...
protected String toString(Item item) {
    return item.getText() + " (" + NumberFormat.getCurrencyInstance().format(item.getPrice()) + ")";
}

// Creates a radio button for the specified Item...
protected JRadioButton createRadioButton(ButtonGroup group, Item item) {
    JRadioButton rb = new JRadioButton(toString(item));
    rb.addItemListener(new ItemHandler(order, item));
    group.add(rb);
    return rb;
}

これをUIに簡単に追加できます...

entreePane.add(createRadioButton(bg, new Item("Uleq Fried Chicken(2 Pieces)", 6.0)));

ここで、アイテムをいつ追加または削除するかを知る方法が必要Orderです。ありがたいことに、これは を使用して処理できます。これによりItemListener、ボタンが選択または選択解除されたときに通知されます...

public class ItemHandler implements ItemListener {

    private Order order;
    private Item item;

    public ItemHandler(Order order, Item item) {
        this.order = order;
        this.item = item;
    }

    @Override
    public void itemStateChanged(ItemEvent e) {
        if (((AbstractButton) e.getSource()).isSelected()) {
            order.add(item);
        } else {
            order.remove(item);
        }
    }

}

これで、集計が必要な場合は、 に尋ねることができますOrder...

詳細については、ボタンの使用方法と項目リスナーの作成方法を詳しく見てください...

注: チェック ボックスの作成は含まれていませんが、基本的なプロセスはラジオ ボタンの作成と同じで、ボタン グループがありません ;)

JComboBoxJListおよび/またはを使用して同じ機能を提供できることにも注意してくださいJTable...

于 2013-08-29T03:19:55.253 に答える