1

地下鉄注文プログラムのコードを書いています。GUI を配置しましたが、すべてのボタンを注文の概要に取得して設定する方法がわかりません。要約には、名前、日付、時間、副原料、小計、可能な二次成分、二次小計、総注文合計を表示する必要があります。GUI は理解していますが、配列とリストに関してはよくわかりません。注文を保存するために arraylist を含める必要があります。

サンドイッチとパンで行ったように、野菜、チーズ、調味料の配列クラスを作成する必要がありますか?

どんなアドバイスも素晴らしいでしょう。ありがとう!

import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;


 public class SubwayForm extends JFrame
{
    public static List<Sandwich> orderedSandwiches;
    private List<Sandwich> sandwiches;
    public static List<Bread> breads;
    public static List<Bread> orderedBreads;


    public SubwayForm() {

            setTitle("Subway");
            setSize(250,250);
            setLayout(null);
            setLocationRelativeTo(null);
            CreateSandwiches();
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setVisible(true);

            //FRAME

            JFrame frame = new JFrame();

            //NAME

            String name = (String) JOptionPane.showInputDialog(frame,
                            "Enter your name", "SUBWAY", JOptionPane.QUESTION_MESSAGE,
                            null, null, null);

            //SIZE

      JPanel size = new JPanel(new GridLayout(2,1));
      JRadioButton jrbInch = new JRadioButton("6 inch");
      JRadioButton jrbFoot = new JRadioButton("12 inch");
      size.add(jrbInch);
      size.add(jrbFoot);

      JOptionPane.showOptionDialog(frame, size, "Sub Size", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                                            null, null);

            //BREAD

            JPanel bread = new JPanel(new GridLayout(6,1));
            JRadioButton jrbWheat = new JRadioButton("9-Grain Wheat");
            JRadioButton jrbHoney = new JRadioButton("Honey Oat");
            JRadioButton jrbItalian = new JRadioButton("Italian");
            JRadioButton jrbHerbs = new JRadioButton("Italian Herbs & Cheese");
            JRadioButton jrbMontChed = new JRadioButton("Monterey Cheddar");
            JRadioButton jrbFlat = new JRadioButton("Flatbread");
            bread.add(jrbWheat);
            bread.add(jrbHoney);
            bread.add(jrbItalian);
            bread.add(jrbHerbs);
            bread.add(jrbMontChed);
            bread.add(jrbFlat);

            JOptionPane.showOptionDialog(frame, bread, "Choose your bread", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                                            null, null);


            //TYPE OF SUB

            JPanel type1 = new JPanel(new GridLayout(6,1));
            JRadioButton jrbChix = new JRadioButton("Oven Roasted Chicken - $3.00");
            JRadioButton jrbMeatball = new JRadioButton("Meatball Marinara - $3.50");
            JRadioButton jrbHam = new JRadioButton("Blackforest Ham - $2.25");
            JRadioButton jrbBLT = new JRadioButton("BLT - $4.00");
            JRadioButton jrbCold = new JRadioButton("Cold Cut - $3.00");
            JRadioButton jrbVeggie = new JRadioButton("Veggie Delight - $4.00");
            type1.add(jrbChix);
            type1.add(jrbMeatball);
            type1.add(jrbHam);
            type1.add(jrbBLT);
            type1.add(jrbCold);
            type1.add(jrbVeggie);

            JOptionPane.showOptionDialog(frame, type1, "Choose your Sub Type", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                                            null, null);

            //CHEESE

            JPanel cheese = new JPanel(new GridLayout(6,1));
            JRadioButton jrbSwiss = new JRadioButton("Swiss");
            JRadioButton jrbProv = new JRadioButton("Provologne");
            JRadioButton jrbCheddar = new JRadioButton("Cheddar");
            JRadioButton jrbPepper = new JRadioButton("Pepperjack");
            JCheckBox jcbExcheese = new JCheckBox("Extra Cheese - $1.00");
            cheese.add(jrbSwiss);
            cheese.add(jrbProv);
            cheese.add(jrbCheddar);
            cheese.add(jrbPepper);
            cheese.add(jcbExcheese);

            JOptionPane.showOptionDialog(frame, cheese, "Choose your cheese", JOptionPane.OK_CANCEL_OPTION,  JOptionPane.QUESTION_MESSAGE, null, null, null);

            //TOASTED

            JPanel toasted = new JPanel(new GridLayout(2,1));
            JRadioButton jrbToasted = new JRadioButton("Yes");
            JRadioButton jrbNottoasted = new JRadioButton("No");
            toasted.add(jrbToasted);
            toasted.add(jrbNottoasted);

            JOptionPane.showOptionDialog(frame, toasted, "Would you like it toasted?", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                                            null, null);

            //VEGGIES

            JPanel veg = new JPanel(new GridLayout(8,1));

            JCheckBox jcbLettuce = new JCheckBox("Lettuce");
            JCheckBox jcbSpinach = new JCheckBox("Spinach");
            JCheckBox jcbOnion = new JCheckBox("Onion");
            JCheckBox jcbPickles = new JCheckBox("Pickles");
            JCheckBox jcbTomatoes = new JCheckBox("Tomatoes");
            JCheckBox jcbPeppers = new JCheckBox("Peppers");
            veg.add(jcbLettuce);
            veg.add(jcbSpinach);
            veg.add(jcbPickles);
            veg.add(jcbOnion);
            veg.add(jcbTomatoes);
            veg.add(jcbPeppers);

            JOptionPane.showOptionDialog(frame, veg, "Choose your veggies", JOptionPane.OK_CANCEL_OPTION,  JOptionPane.QUESTION_MESSAGE, null, null, null);

            //CONDIMENTS

            JPanel condiments = new JPanel(new GridLayout(8,1));

            JCheckBox jcbMayo = new JCheckBox("Mayo");
            JCheckBox jcbMustard = new JCheckBox("Mustard");
            JCheckBox jcbDressing = new JCheckBox("Italian Dressing");
            condiments.add(jcbMayo);
            condiments.add(jcbMustard);
            condiments.add(jcbDressing);

            JOptionPane.showOptionDialog(frame, condiments, "Choose your condiments", JOptionPane.OK_CANCEL_OPTION,  JOptionPane.QUESTION_MESSAGE,null, null, null);

            //DO ANOTHER?

            JPanel another = new JPanel(new GridLayout(2,1));
            JRadioButton jrbAnother = new JRadioButton("Yes");
            JRadioButton jrbNotanother = new JRadioButton("No");
            another.add(jrbAnother);
            another.add(jrbNotanother);

            JOptionPane.showOptionDialog(frame, another, "Do you want another?", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                                            null, null);

            //SUMMARY

            JPanel summary = new JPanel();
            JOptionPane.showMessageDialog(frame, " Customer: ",null,     JOptionPane.PLAIN_MESSAGE);
            System.exit(0);


    }//end of subwayform

            private void CreateBread()
            {
                    breads = new ArrayList<Bread>();
                    Bread orc = new Bread("Italian");
                    breads.add(orc);
                    breads.add(new Bread("Wheat"));
                    breads.add(new Bread("Honey Oat"));
                    breads.add(new Bread("Herbs and Cheese"));
                    breads.add(new Bread("Cheddar"));
                    breads.add(new Bread("Flatbread"));
            }//end of bread

      private void CreateSandwiches()
      {
      sandwiches = new ArrayList<Sandwich>();
      Sandwich orc = new Sandwich("Oven Roasted Chicken", 3.00);
      sandwiches.add(orc);
      sandwiches.add(new Sandwich("Meatball Marinara", 3.50));
      sandwiches.add(new Sandwich("Blackforest Ham", 2.25));
      sandwiches.add(new Sandwich("BLT", 4.00));
      sandwiches.add(new Sandwich("Cold Cut Combo", 3.00));
      sandwiches.add(new Sandwich("Veggie Delite", 4.00));
      }//end of sandwiches


       public static void main(String[] args)
      {
                    new SubwayForm();

                    orderedSandwiches = new ArrayList<Sandwich>();
                    orderedBreads = new ArrayList<Bread>();

      }    


}//end of subwayform jframe    

class Bread
{
    private String name;
    private String bread;

    public Bread(String name)
    {
            this.name = name;
    }

    public void setBread(String s)
    {
            this.bread = s;
    }

    public String getBread()
    {
            return bread;
    }

 }// end of bread


class Sandwich {

    private String name;
    private double cost;


    public Sandwich(String name, double price)
    {
            this.name = name;
            this.cost = price;
    }

    public String getName()
    {
            return name;
    }

    public double getCost()
    {
            return cost;
    }

}//end of sandwich
4

2 に答える 2

2

いくつかの提案:

  • JFrame のサブクラス化は避けてください。これを行う必要はめったになく、これを避けることでプログラムの柔軟性を向上させることができます。
  • OrderedSandwiches 変数は静的であってはなりません。これをインスタンス変数にするには、プログラムに他の変更を加える必要がある場合があります。
  • nullGUI やコンポーネントのサイズを設定したり、レイアウトを使用したりしないでください。初心者には、null レイアウトを使用してコンポーネントを直接配置する方が簡単に思えるかもしれませんが、GUI を作成すればするほど、これを行うことで隅に自分自身をペイントしていることに気付くでしょう。レイアウト マネージャーを適切に使用すると、GUI の保守とアップグレードがはるかに簡単になります。
  • 巨大なメソッドとコンストラクターを、より管理しやすくテストしやすい単位に分割します。
  • System.exit(0)プログラムのロジックを短絡しているように見えるので、呼び出す必要はありません。
  • コードのフォーマットを改善して、私たちとあなたの両方にとってプログラムを読みやすく、デバッグしやすくします。同じレベルのすべてのコード ブロックは、同じ量だけインデントする必要があります (通常は 3 つのスペースを使用します)。ブロック間の空白行は 1 行で十分です。
  • ユーザーに多数のオプション ペインを投げるよりも、GUI のサブセクションごとに JPanel を作成し、ユーザーが 1 つのビューで複数の選択肢を入力できるようにする、より大きな JPanel に属する JPanel を結合することを検討してください。ユーザーはこれを高く評価します。
  • 副作用によって (クラス フィールドを直接変更することによって) プログラムの状態を変更する多数の void メソッドを使用することは避け、代わりに、ほとんどのクラス フィールドをそのままにして、代わりにクラスが使用するオブジェクトを返すメソッドを優先します。これにより、エラーのデバッグと、プログラムの更新と改良が大幅に容易になります。
  • あなたの小さなクラスのいくつかは少し冗長に見えます。おそらく、name フィールドと cost フィールドを持つ抽象クラス SandwichComponent を使用し、そのサブクラスをコンポーネントの特定のサブタイプに使用できます。
于 2013-08-03T13:06:18.560 に答える