본문 바로가기

Learning/JAVA

TextField에 입력한 값을 "추가" 버튼을 눌렀을때 TextArea에 나타내기. (다중선택 가능) (ListTest)

  • TextField에 입력한 값을 추가 버튼을 눌렀을때 TextArea에 나타내기. (다중선택 가능) (ListTest)

    • 메인함수에 생성자 부르기 

    • 생성자 만들고 setTitle로 제목 짓기, BorderLayout으로 원하는 컴포넌트들 배치할 수 있도록 하기, X버튼 눌렀을때 종료되도록 하기

    • 패널 생성하고 텍스트필드 만들기, 추가 버튼 생성, 다중선택 체크박스 생성, 패널의 색상 그레이색으로, 패널에 텍스트필드, 버튼, 체크박스 붙이기

    • 패널 2 생성하고 그리드 레이아웃(행, 열)을 매개변수로 주기, 리스트 생성(패널에 리스트 추가), 리스트에 출력되는 값들을 TextArea에 나오도록 TextArea생성, 패널2에 리스트와 TextArea붙이기

    • 버튼에 액션을 주기위해 액션리스터 연결하기

    • BorderLayout의 North에 패널 1 붙이기, Center에 패널 2 붙이기

    • 프레임의 사이즈 정하고 프레임이 나오도록하기

    • 만약에 텍스트필드에 공백을 넣는다면? 

    • 리스트에는 텍스트 필드에 쓴 값을 붙이기

    • 텍스트 필드 비우기 (공백주기)

    • 체크박스를 누르는건 아이템이벤트, 아이템리스너 (버튼은 액션이벤트 액션리스너)

    • 이벤트를 발생한객체를 구분하여 (체크박스인지 리스트인) if문 적어주고 또 그 안에서 리스트가 다중선택인지 아닌지, 체크박스 선택인지 해제인지 나누기

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package swingTest;
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.List; //util에 있는 List는 Arraylist
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
 
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
 
public class ListTest extends JFrame implements ActionListener, ItemListener{
    private JTextField tf;
    private JTextArea ta;
    private List list;
    private JCheckBox cb;
    
    public ListTest() { //생성자 만들기
        setTitle("List 예제");
        setLayout(new BorderLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JPanel p1=new JPanel();
        tf=new JTextField(15);
        JButton btn=new JButton("추가");
        cb=new JCheckBox("다중선택");
        p1.setBackground(Color.DARK_GRAY);
        p1.add(tf); p1.add(btn); p1.add(cb);
        
        JPanel p2=new JPanel(new GridLayout(1,2));
        list=new List();
        ta=new JTextArea();
        p2.add(list); p2.add(ta);
        
        btn.addActionListener(this); //연결
        tf.addActionListener(this); //엔터쳐도 값 들어감
        list.addItemListener(this); //연결
        cb.addItemListener(this); //연결
        
        add(BorderLayout.NORTH,p1);
        add(BorderLayout.CENTER,p2);
        
        setSize(400,400);
        setVisible(true);
        
        
    }
    
    public static void main(String[] args) {
        new ListTest(); //생성자 부르기
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
//        if(tf.getText().length()==0) return;
        if(tf.getText().isEmpty()) return
        list.add(tf.getText());
        tf.setText(""); //비우기
        
    }
 
    @Override
    public void itemStateChanged(ItemEvent e) {
        //이벤트를 발생한 객체를 구분 (체크박스인지 리스트인지)
        Object obj=e.getSource();
        if(obj==list) { //list가 이벤트 발생
            ta.setText("");
            if(list.isMultipleMode()) { //리스트가 다중선택
                String []arr=list.getSelectedItems();
                for(int i=0;i<arr.length;i++) {
                    ta.append(arr[i]+"\n");
                }
            }else { //리스트가 단일선택
                //리스트(list)에서 선택한 내용을 textarea(ta)에 출력하기
                ta.setText(list.getSelectedItem());
            }
        }else if(obj==cb) { //checkbox가 이벤트 발생
            if(cb.isSelected()) { //checkbox 선택인지->리스트가 다중모드
                list.setMultipleMode(true);
            }else { //checkbox 해제인지->리스트가 단일모드
                list.setMultipleMode(false);
            }
        }
    }
}
 
cs