如何从多个JOptionPane获取信息并将其放在摘要对话框中

时间:2013-08-03 11:54:50

标签: java swing joptionpane

我正在为地铁订购计划编写代码。我有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

2 个答案:

答案 0 :(得分:2)

首先,您应该拥有一个Order类,其中包含SandwichBread个实例字段,作为将它们组合在一起的方式,而不是使用这样的列表。您还应该制作CheeseCondiment和&amp; c类,并将其作为实例变量包含在内。

其次,为什么要同时创建frame并扩展JFrame?你只需要做一个或另一个,而不是两个。您可以删除frame变量并改为使用this

第三,你可能想要注意main中的最后两个语句永远不会完成,因为构造函数的结尾是System.exit(0)

我可以给你几千条其他建议,但如果我走了那么远,我可能会开始亵渎。

答案 1 :(得分:2)

一些建议:

  • 避免对JFrame进行子类化。很少需要这样做,避免这样做可以提高程序的灵活性。
  • orderedSandwiches变量不应该是静态的。您可能需要对程序进行其他更改,以允许它成为实例变量。
  • 不要设置GUI或组件的大小,也不要使用null布局。虽然新手似乎更容易使用空布局并直接放置他们的组件,但他们创建的GUI越多,他们就会发现越多,他们就会在角落里自己画画。正确使用布局管理器将使 更容易维护和升级GUI。
  • 将大型方法和构造器分解为更小,更易于管理和可测试的单元。
  • 无需致电System.exit(0)并且有充分的理由不要因为它似乎会破坏程序的逻辑。
  • 改进您的代码格式,使您的程序更容易阅读和调试,为我们。同一级别的所有代码块应缩进相同的数量(我通常使用3个空格)。街区之间的空白线很多。
  • 比向用户抛出一堆选项窗格更好,考虑为GUI的每个子部分创建JPanels,然后将更大的JPanel中的那些部分组合在一起,允许用户在一个部分上输入多个选项视图。您的用户会很感激。
  • 避免使用许多通过副作用改变程序状态的void方法(通过直接更改类字段),而是更喜欢单独留下大多数类字段的方法,而是返回该类随后使用的对象。这将极大地简化您的错误调试以及更新和优化程序的能力。
  • 你的一些小班看起来有点多余。也许您可以使用具有名称和成本字段的抽象类SandwichComponent,并为特定的子类型组件使用它的子类。