JAVA GUI 피자 주문 애플리케이션 제작

JAVA GUI 피자 주문 애플리케이션 제작 중입니다. 미숙하게나마 다른 부분은 다 한 것 같은데, 마지막에 가격을 출력하는 데에 있어서 모르는 부분이 생겨서 질문드립니다. TotalPrice에 SizePrice와 ExtraPrice를 더해서 Price TextField에 출력이 되게 해야하는데, 연산식?이라 해야할까요 그 부분을 잘 모르겠습니다. 도와주시면 감사하겠습니다...

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

class WelcomePanel extends JPanel {

private JLabel message;
public WelcomePanel() {
    message = new JLabel("자바 피자에 오신것을 환영합니다.");
    add(message);
}

}

class TypePanel extends JPanel {

private JRadioButton combo, potato, bulgogi;
public TypePanel() {
    setLayout(new GridLayout(3,1));
    combo = new JRadioButton("콤보",true);
    potato = new JRadioButton("포테이토");
    bulgogi = new JRadioButton("불고기");
    ButtonGroup Type = new ButtonGroup();
    Type.add(combo);
    Type.add(potato);
    Type.add(bulgogi);
    setBorder(BorderFactory.createTitledBorder("종류"));
    add(combo);
    add(potato);
    add(bulgogi);
}

} class ToppingPanel extends JPanel implements ItemListener {

private JCheckBox greenpeper, cheese, peperoni, bacon;
int ExtraPrice = 0;
public ToppingPanel() {
    setLayout(new GridLayout(4,1));
    greenpeper = new JCheckBox("피망");
    cheese = new JCheckBox("치즈");
    peperoni = new JCheckBox("페페로니");
    bacon = new JCheckBox("베이컨");
    setBorder(BorderFactory.createTitledBorder("추가토핑"));
    add(greenpeper);
    add(cheese);
    add(peperoni);
    add(bacon);
    greenpeper.addItemListener(this);
    cheese.addItemListener(this);
    peperoni.addItemListener(this);
    bacon.addItemListener(this);
}

@Override
public void itemStateChanged(ItemEvent topping) {

    if(greenpeper.isSelected() == true)
        ExtraPrice += 1000;
    if(cheese.isSelected() == true)
        ExtraPrice += 1000;
    if(peperoni.isSelected() == true)
        ExtraPrice += 1000;
    if(bacon.isSelected() == true)
        ExtraPrice += 1000;
    }

}

class SizePanel extends JPanel implements ActionListener {

private JRadioButton s, m, l;
int SizePrice;
public SizePanel() {
setLayout(new GridLayout(3,1));
s = new JRadioButton("Small",true);
m = new JRadioButton("Medium");
l = new JRadioButton("Large");
ButtonGroup Size = new ButtonGroup();
Size.add(s);
Size.add(m);
Size.add(l);
setBorder(BorderFactory.createTitledBorder("크기"));
add(s);
add(m);
add(l);
s.addActionListener(this);
m.addActionListener(this);
l.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent size) {
    if(s.isSelected() == true) {
        SizePrice = 12000;
    }
    if(m.isSelected() == true) {
        SizePrice = 15000;
    }
    if(l.isSelected() == true) {
        SizePrice = 18000;
    }
}

}

public class PizzaOrder extends JFrame {

private static final int ExtraPrice = 0;
private static final int SizePrice = 0;
private JButton order, cancel;
JTextField Price;
int TotalPrice;
WelcomePanel WP = new WelcomePanel();
TypePanel TP = new TypePanel();
ToppingPanel TpP = new ToppingPanel();
SizePanel SP = new SizePanel();

public PizzaOrder() {
    setSize(550,250);
    setTitle("피자 주문");

    JPanel J = new JPanel();
    order = new JButton("주문");
    cancel = new JButton("취소");
    Price = new JTextField(10);
    J.add(order);
    J.add(cancel);
    J.add(Price);

    add(WP,BorderLayout.NORTH);
    add(TP,BorderLayout.WEST);
    add(TpP,BorderLayout.CENTER);
    add(SP,BorderLayout.EAST);
    add(J,BorderLayout.SOUTH);

    order.addActionListener(a -> {
        ## 이 부분입니다..

        Price.setText("" + TotalPrice);
    });

    cancel.addActionListener(b -> {
        TotalPrice = 0;
        Price.setText("" + TotalPrice);
    });
    setVisible(true);
}
public static void main(String[] args) {
    PizzaOrder PO = new PizzaOrder();
}

}

  • 안녕하세요 :-) PizzaOrder클래스(JFrame)에서 SizePanel.SizePrice와 ToppingPanel.ExtraPrice와 멤버 TotalPrice를 모두 더하고 .toString();처리하여 Price.setText메서드로 출력해주시면 될 것같습니다. 혹시 해보셨는지요? 단, SizePanel클래스의 SizePrice필드, ToppingPanel클래스의 ExtraPrice필드가 private시면 안됩니다. Jerry Jueng 2018.12.1 22:25
  • 답변 감사합니다 :) 하지만 제가 능숙하지 못해서요. 번거로우시겠지만 소스로 설명해주실 수 있나요..? 최석근 2018.12.1 23:03
  • 직접한 것이라면 위의 답변보고 코딩이 가능할 것 같은데요? 정영훈 2018.12.1 23:24
  • 글로 보니까 이해가 잘 안돼서요,... 부탁드립니다.. 최석근 2018.12.1 23:51
  • 마크다운 문법 지켜주세용 Promixium 2018.12.6 11:42

1답변

  • 안녕하세요 :-)

    SizePrice은 여기서 찾을 수 있고:

    class SizePanel extends JPanel implements ActionListener {
    //...중략...
    public int SizePrice;
    //...중략...
    }
    

    ExtraPrice는 여기서 찾을 수 있으며:

    private JCheckBox greenpeper, cheese, peperoni, bacon;
    //...중략...
    public int ExtraPrice = 0;
    //...중략...
    
    }
    

    출력해줘야할 이벤트 메소드에서 모두 더해주시면 되겠죠?

    public class PizzaOrder extends JFrame {
    
    // **위의 클래스 내 멤버변수에서 가져올 아이들이기 때문에 여기선 굳이 멤버로 필요하지 않을 것입니다.
    //private static final int ExtraPrice = 0;
    //private static final int SizePrice = 0;
    int TotalPrice;
    //...중략...
    public PizzaOrder() {
        // ...중략...
        order.addActionListener(a -> {
            // 이 부분입니다...
            this.TotalPrice = SizePanel.SizePrice+ToppingPanel.ExtraPrice;
            Price.setText("" + TotalPrice.toString());
        });
        // ...중략...
    }
    

    여기서 받는 조언들이 당장의 급한 불은 끌 수 있겠지만 '내 것'으로 만드시기 위해 조금 더 공부해보시는 것은 어떠신지요?

    도움이 되셨기를 바랍니다.

    감사합니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.