2013-08-03 1 views
1

지하철 주문 프로그램 용 코드를 작성하고 있습니다. GUI를 배치했지만 주문 요약에 모든 단추를 가져와 설정하는 방법을 알지 못합니다. 요약에는 이름, 날짜, 시간, 하위 구성 요소, 소계, 가능한 두 번째 주문 구성 요소, 두 번째 소계 및 총 주문 총계가 표시되어야합니다. 나는 GUI를 이해하지만 어레이와리스트에 관해서는 그렇게 확신 할 수 없으며 명령을 저장하기 위해 arraylist를 포함시켜야한다.여러 JOptionPane에서 정보를 가져와 요약 대화 상자에 넣는 방법

샌드위치와 빵처럼 야채, 치즈 및 조미료에 대한 배열 클래스를 만들어야합니까?

조언이 도움이 될 것입니다. 감사! 먼저

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

, 당신은 함께 그룹화보다는 같은 목록을 사용하는 방법으로, SandwichBread 인스턴스 필드가있는 Order 클래스를 가져야한다. 또한 Cheese, Condiment, & 개의 클래스를 만들어 인스턴스 변수로 포함시켜야합니다.

둘째, frame을 만들고 JFrame을 동시에 확장하는 이유는 무엇입니까? 둘 중 하나만 수행하면됩니다. frame 변수를 삭제하고 대신 this을 사용할 수 있습니다.

셋째, 생성자의 끝이 System.exit(0)이기 때문에 main의 마지막 두 명령문이 실행되지 않음을 알 수 있습니다.

내가 줄 수있는 조언이 몇 천 가지가 있지만, 내가 그렇게까지 간다면 내가 더 욕되게 될 수 있습니다.

2

제안 :

  • 피 하위 클래스라는 JFrame의를. 이 작업을 수행 할 필요가 거의 없으며이를 피하면 프로그램의 유연성을 향상시킬 수 있습니다.
  • orderedSandwiches 변수는 정적이어서는 안됩니다. 이 변수를 인스턴스 변수로 허용하려면 프로그램을 다른 변경해야 할 수도 있습니다.
  • GUI 또는 구성 요소의 크기를 설정하지 말고 null 레이아웃을 사용하지 마십시오. 초보자에게는 null 레이아웃을 사용하고 구성 요소를 직접 배치하는 것이 더 쉬운 것처럼 보일 수도 있지만 더 많은 GUI가 작성되면 더 많은 사람들이 볼 수 있습니다. 이렇게하면 구석에 그림이 그려집니다. 레이아웃 관리자를 올바르게 사용하면 GUI를 쉽게 유지 관리하고 업그레이드 할 수 있습니다.
  • 거대한 방법과 생성자를 더 작고 관리하기 쉽고 테스트 가능한 단위로 분해하십시오.
  • System.exit(0)으로 전화 할 필요가 없으며 프로그램 논리를 단락시키는 것으로 보이지 않는 좋은 이유가 있습니다.
  • 에 대해 프로그램을 읽고 디버그하기가 쉬워 지도록 코드 형식을 개선하십시오. 같은 레벨의 모든 코드 블록은 같은 양만큼 들여 쓰기해야합니다 (보통 3 개의 공백을 사용합니다). 블록 사이에 하나의 빈 줄이 충분합니다.
  • 많은 옵션 창을 사용자에게 던지는 것보다 GUI의 각 하위 섹션에 대해 JPanel을 만든 다음 더 큰 JPanel에서 함께 속하는 항목을 결합하여 사용자가 여러 선택 항목을 입력 할 수 있도록하는 것이 좋습니다 전망. 귀하의 사용자는이 점을 높이 평가할 것입니다.
  • (클래스 필드를 직접 변경하여) 부작용에 의해 프로그램의 상태가 변경되는 것을 피하고 대부분의 클래스 필드를 그대로두고 대신 클래스가 사용하는 객체를 반환하는 메서드를 선호합니다. 이렇게하면 오류 디버깅과 프로그램을 업데이트하고 수정하는 기능이 크게 향상됩니다.
  • 작은 클래스 중 일부는 약간 중복 된 것처럼 보입니다. 아마도 이름과 비용 필드가있는 추상 클래스 인 SandwichComponent를 사용할 수 있고 특정 하위 유형의 구성 요소에 대해 하위 클래스를 사용할 수 있습니다.
관련 문제