我正在为地铁订购计划编写代码。我有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
答案 0 :(得分:2)
首先,您应该拥有一个Order
类,其中包含Sandwich
和Bread
个实例字段,作为将它们组合在一起的方式,而不是使用这样的列表。您还应该制作Cheese
,Condiment
和&amp; c类,并将其作为实例变量包含在内。
其次,为什么要同时创建frame
并扩展JFrame
?你只需要做一个或另一个,而不是两个。您可以删除frame
变量并改为使用this
。
第三,你可能想要注意main中的最后两个语句永远不会完成,因为构造函数的结尾是System.exit(0)
。
我可以给你几千条其他建议,但如果我走了那么远,我可能会开始亵渎。
答案 1 :(得分:2)
一些建议:
null
布局。虽然新手似乎更容易使用空布局并直接放置他们的组件,但他们创建的GUI越多,他们就会发现越多,他们就会在角落里自己画画。正确使用布局管理器将使 更容易维护和升级GUI。System.exit(0)
并且有充分的理由不要因为它似乎会破坏程序的逻辑。