2015-08-14 48 views
-1

我正在编写一个程序,以允许客户通过JFrame GUI(使用Swing)放置三明治订单。我希望客户能够下多个订单。需要关于去哪里使用程序的建议

目前,你会打开该程序,并选择你想要的。弹出一个窗口显示您的选择。我希望用户可以选择其他订单(这是我尚未弄清楚的部分)。一直以来,我都希望能够跟踪他们的总数,以便在完成订购后显示总计。我的代码可以用于简单放置一个订单:

import java.awt.*; 
import javax.swing.*; 
import javax.swing.BorderFactory; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JOptionPane; 
import java.util.ArrayList; 

import static javax.swing.JOptionPane.YES_OPTION; 


public class SubwayMobileOrder 
{ 


    public static void main(String[] args) { 

     Order placeOrder = new Order(); 

     placeOrder.placeOrder(); 

     placeOrder.printOrder(); 

    } 
} 

class TabletScreen extends JFrame implements ActionListener 
{ 
    // Customer name 
    private JLabel jlbCustomerName = new JLabel("Enter a Name for the order:"); 
    private JTextField jtfCustomerName = new JTextField(15); 

    // Bread choices 
    private JLabel jlbBread = new JLabel("Choose a type of bread"); 
    private JComboBox jcbBreadType = new JComboBox(new Object[]{"Select Bread Type", "Italin Herbs and Cheese", "Wheat"}); 

    // Sub Size 
    private JLabel jlbSize = new JLabel("What size sub would you like"); 
    private JComboBox jcbSize = new JComboBox(new Object[]{"Select Sub Size", "12 inch", "6 inch"}); 

    // Sub meat 
    private JLabel jlbMeat = new JLabel("Select what Meat(s) you would like"); 
    private JCheckBox jcxChicken = new JCheckBox("Chicken"); 
    private JCheckBox jcxBacon = new JCheckBox("Bacon"); 

    // Sub Cheese 
    private JLabel jlbCheese = new JLabel("Select what Cheese(s) you would like"); 
    private JCheckBox jcxAmerican = new JCheckBox("American"); 
    private JCheckBox jcxSwiss = new JCheckBox("Swiss"); 

    // Ingrediants ie veggies and what not 
    private JLabel jlbVeggies = new JLabel("Select what Veggies you would like"); 
    private JCheckBox jcxOnion = new JCheckBox("Onion"); 
    private JCheckBox jcxLettuce = new JCheckBox("Lettuce"); 

    // Addons 
    private JLabel jlbDoubleCheese = new JLabel("Double Cheese"); 
    private JComboBox jcbDoubleCheese = new JComboBox(new Object[] {"yes", "no"}); 


    private JLabel jlbDoubleMeat = new JLabel("Double Meat"); 
    private JComboBox jcbDoubleMeat = new JComboBox(new Object[] {"yes", "no"}); 

    // Ok button 
    JButton okButton = new JButton("Sub Complete"); 


    public TabletScreen() { 

     // Main panel with: name, bread type, size 
     JPanel mainOrderInfo = new JPanel(); 
     mainOrderInfo.setLayout(new GridLayout(6, 1, 10, 10)); 
     mainOrderInfo.add(jlbCustomerName); 
     mainOrderInfo.add(jtfCustomerName); 
     mainOrderInfo.add(jlbBread); 
     mainOrderInfo.add(jcbBreadType); 
     mainOrderInfo.add(jlbSize); 
     mainOrderInfo.add(jcbSize); 

     // Meat Panel 
     JPanel meatPanel = new JPanel(); 
     meatPanel.setLayout(new GridLayout(3, 1, 10, 10)); 
     meatPanel.add(jlbMeat); 
     meatPanel.add(jcxBacon); 
     meatPanel.add(jcxChicken); 

     // Cheese Panel 
     JPanel cheesePanel = new JPanel(); 
     cheesePanel.setLayout(new GridLayout(3, 1, 10, 10)); 
     cheesePanel.add(jlbCheese); 
     cheesePanel.add(jcxAmerican); 
     cheesePanel.add(jcxSwiss); 

     // Veggies Panel 
     JPanel veggiesPanel = new JPanel(); 
     veggiesPanel.setLayout(new GridLayout(3, 1, 10, 10)); 
     veggiesPanel.add(jlbVeggies); 
     veggiesPanel.add(jcxOnion); 
     veggiesPanel.add(jcxLettuce); 

     // Addons Panel 
     JPanel addonsPanel = new JPanel(); 
     addonsPanel.setLayout(new GridLayout(4, 1, 10, 10)); 
     addonsPanel.add(jlbDoubleCheese); 
     addonsPanel.add(jcbDoubleCheese); 
     addonsPanel.add(jlbDoubleMeat); 
     addonsPanel.add(jcbDoubleMeat); 

     // Setup overall main panel 
     JPanel mainPanel = new JPanel(new GridLayout(1, 5, 15, 15)); 
     mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); 
     mainPanel.setOpaque(true); 
     mainPanel.add(mainOrderInfo); 
     mainPanel.add(meatPanel); 
     mainPanel.add(cheesePanel); 
     mainPanel.add(veggiesPanel); 
     mainPanel.add(addonsPanel); 

     JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 10)); 
     buttonPanel.add(okButton); 

     setLayout(new BorderLayout()); 
     add(mainPanel, BorderLayout.CENTER); 
     add(okButton, BorderLayout.SOUTH); 

     okButton.addActionListener(this); 

    } 


     //------------------------------------------------------------------------\\ 

     public void actionPerformed (ActionEvent e) 
     { 
      Sandwich sub = new Sandwich(); 
      Order order = new Order(); 

      // getting bread 
      if (jcbBreadType.getSelectedIndex() == 1) 
      { sub.addSub(new ItlainHerbs()); } 
      if (jcbBreadType.getSelectedIndex() == 2) 
       { sub.addSub(new Wheat()); } 

      // getting meat 
      if (jcxBacon.isSelected()) 
       { sub.addSub(new Bacon()); } 
      if (jcxChicken.isSelected()) 
       { sub.addSub(new Chicken()); } 

      // getting cheese 
      if (jcxAmerican.isSelected()) 
       { sub.addSub(new American()); } 
      if (jcxSwiss.isSelected()) 
       { sub.addSub(new Swiss()); } 

      // getting veggies 
      if (jcxOnion.isSelected()) 
       { sub.addSub(new Onion()); } 
      if (jcxLettuce.isSelected()) 
       { sub.addSub(new Lettuce()); } 

      // getting 

      order.addOrder(sub); 
      JOptionPane.showMessageDialog(null, sub.toString()); 

     } 



} 

//---------------------------------------------------------------------------------------\\ 
class Order 
{ 
    private static ArrayList<Sandwich> order = new ArrayList<Sandwich>(15); 

    public Order() {} 

    public void addOrder(Sandwich a) 
    { 
     order.add(a); 
    } 

    public void placeOrder() 
    { 
     JFrame frame = new TabletScreen(); 
     frame.setTitle("Subway Order App"); 
     frame.setSize(800, 500); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public void printOrder() 
    { 
     String totalOrder = "\nThis is your total order \n"; 
     for (int i = 0; i < order.size(); i++) 
     { 
      if (order.get(i) instanceof Sandwich) 
      { 
       totalOrder += "\nSub: " + order.get(i); 
      } 
      JOptionPane.showMessageDialog(null, totalOrder); 
     } 

    } 
} 

class Sandwich 
{ 
    private ArrayList<Sub> sub = new ArrayList<Sub>(20); 

    public Sandwich() {} 

    public void addSub(Sub x) { sub.add(x); } 


    public String toString() 
    { 
     String yourOrder = "\n Your Sub is as follows: \n "; 
     for (int i = 0; i < sub.size(); i++) 
     { 
      if (sub.get(i) instanceof Bread) 
       { yourOrder += "\nBread type: " + sub.get(i); } 
      if (sub.get(i) instanceof Meat) 
       { yourOrder += "\nMeat type: " + sub.get(i); } 
      if (sub.get(i) instanceof Cheese) 
       { yourOrder += "\nCheese type: " + sub.get(i); } 
      if (sub.get(i) instanceof Veggies) 
       { yourOrder += "\nVeggie type: " + sub.get(i); } 

     } 

     return yourOrder; 
    } 
} 

//===============================================================\\ 

class Sub // Sub super class 
{ 
    Sub() {} 
} 

//---------------------------------------------------------------\\ 
class Bread extends Sub 
{ 
    String bread; 
    Bread(String bread) { this.bread = bread; } 

    public String toString() { return bread; } 
} 

class ItlainHerbs extends Bread 
{ 
    ItlainHerbs() { super("Italin Herbs and Cheese"); } 
} 

class Wheat extends Bread 
{ 
    Wheat() { super("Wheat"); } 
} 
//---------------------------------------------------------------\\ 

class Meat extends Sub 
{ 
    String meat; 
    Meat(String meat) { this.meat = meat; } 

    public String toString() { return meat; } 
} 

class Bacon extends Meat 
{ 
    Bacon() { super("Bacon"); } 
} 

class Chicken extends Meat 
{ 
    Chicken() { super("Chiken"); } 
} 
//---------------------------------------------------------------\\ 
class Cheese extends Sub 
{ 
    String cheese; 
    Cheese(String cheese) { this.cheese = cheese; } 

    public String toString() { return cheese; } 
} 

class American extends Cheese 
{ 
    American() { super("American"); } 
} 

class Swiss extends Cheese 
{ 
    Swiss() { super("Swiss"); } 
} 
//---------------------------------------------------------------\\ 
class Veggies extends Sub 
{ 
    String veggies; 
    Veggies(String veggies) { this.veggies = veggies; } 

    public String toString() { return veggies; } 
} 

class Onion extends Veggies 
{ 
    Onion() { super("Onion"); } 
} 

class Lettuce extends Veggies 
{ 
    Lettuce() { super("Lettuce"); } 
} 

//===============================================================\\ 
+1

这是一个太开放式问题为[代码审查堆栈交易所]更适合(http://codereview.stackexchange.com/)。 –

+0

@SimonShine如果代码按预期工作,这是一个很好的建议。但是,从我所看到的情况来看,这是一个请求,可以一次性更改允许多个请求的功能,这是Code Review上的主题。 –

+3

这个问题说“需要建议”,实际上并没有问任何问题。如果问题是正确的,这对于Code Review来说是非常理想的材料,例如:“我想制作X.我已经制作了Y.需要对X做出什么样的改变,以便我可以优雅地完成Y?” –

回答

0

我会包含一个JTable或JList的(初始为空)初始的JFrame,附加和删除按钮。 Add按钮会调出你的JFrame。订单完成后,新的行将被添加到表/列表中。 选择行(或可能多于一个)将启用删除按钮,否则通常会禁用。按下删除按钮将删除选定的条目。

是否使用列表或表格取决于您是否想只显示命令的名称,或所有字段。