자바 JTextArea와 ItemListener와 관련된 질문드립니다.

조회수 309회

public class HobbyEx extends JFrame {

private String [] type = {"남자", "여자"};
private String [] hobby = {"운동", "음악감상", "영화", "독서", "컴퓨터게임"};

private JLabel printType = new JLabel();

private JComboBox<String> typeCombo = new JComboBox<String>(type); //성별담긴 콤보박스
private JCheckBox[] Hobby = new JCheckBox[5];
private JTextArea ta = new JTextArea("",20,40); //취미 선택 비선택 알림창 띄우는 textArea

public HobbyEx() {
    setTitle("취미선택");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container c = getContentPane();
    c.setLayout(new FlowLayout());

    c.add(typeCombo);

    typeCombo.addActionListener(new ActionListener() { //성별리스트 리스너
        public void actionPerformed(ActionEvent e) {
            JComboBox<String> cb = (JComboBox<String>)e.getSource();
            int index = cb.getSelectedIndex();
            printType.setText(type[index]); //리스트에서 성별을 선택하면 라벨을 선택한 성별로 바꿔줌.
        }
    });

    MyItemListener listener = new MyItemListener();
    for(int i = 0; i <hobby.length; i++) { //체크박스 5개 생성
        Hobby[i] = new JCheckBox(hobby[i]);
        c.add(Hobby[i]);
        Hobby[i].addItemListener(listener);
    }

    c.add(printType);
    c.add(ta);

    setSize(500,500);
    setVisible(true);
}

class MyItemListener implements ItemListener{
    public void itemStateChanged(ItemEvent e) {
        if(e.getStateChange() == ItemEvent.SELECTED) {
            if(e.getItem() == hobby[0]) {
                JTextField t = new JTextField("운동은 취미입니다. \n");
                ta.append(t.getText());
            }
            else if(e.getItem() == hobby[1]) {
                JTextField t = new JTextField("음악감상은 취미입니다. \n");
                ta.append(t.getText());
            }
            else if(e.getItem() == hobby[2]) {
                JTextField t = new JTextField("영화는 취미입니다. \n");
                ta.append(t.getText());
            }
            else if(e.getItem() == hobby[3]) {
                JTextField t = new JTextField("독서는 취미입니다. \n");
                ta.append(t.getText());
            }
            else if(e.getItem() == hobby[4]) {
                JTextField t = new JTextField("컴퓨터게임은 취미입니다. \n");
                ta.append(t.getText());
            }
        }

        else {
            if(e.getItem() == hobby[0])
                ta.append("운동은 취미가 아닙니다. \n");
            else if(e.getItem() == hobby[1])
                ta.append("음악감상은 취미가 아닙니다. \n");
            else if(e.getItem() == hobby[2])
                ta.append("영화는 취미가 아닙니다. \n");
            else if(e.getItem() == hobby[3])
                ta.append("독서는 취미가 아닙니다. \n");
            else if(e.getItem() == hobby[4])
                ta.append("컴퓨터게임은 취미가 아닙니다. \n");
        }
    }
}

public static void main(String[] args) {
    new HobbyEx();
}

}

이 코드는 체크박스 5개가 만들어지고, 체크박스를 선택을 하면 JTextArea에 "무엇을 선택했습니다." 이런식으로 뜨게 하려고 한 작업입니다. 하지만 제가 디버깅을 했을 때, ItemListsner안에서 이루어져야 할 작업이 일어나지 않습니다. 예를들어 제가 <운동>이라는 체크박스를 체크한다면 ItemListener 내부에 if(e.getItem() == hobby[0]) 에 걸려서 "운동은 취미입니다."가 JTextArea를 통해 출력 되어야 하는데, 그냥 지나쳐 갑니다. 다른 체크 박스를 체크해도 마찬가지구요. 혹시 가정문이 잘못된건지, 아니면 JTextArea로 출력이 되는걸 잘못 만들었는지 궁금합니다

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)