• addActionListener 메소드의 매개변수에 액션 리스너 생성, addItemLister 메소드의 매개변수에 ItemStateChanged 생성 (ListTest3)

 

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
94
95
96
97
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 ListTest3 extends JFrame{
    private JTextField tf;
    private JTextArea ta;
    private List list;
    private JCheckBox cb;
    
    public ListTest3() { //생성자 만들기
        setTitle("List 예제3");
        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(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(tf.getText().isEmpty()) return;
                list.add(tf.getText());
                tf.setText(""); //비우기
            }
        });
        
        tf.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(tf.getText().isEmpty()) return;
                list.add(tf.getText());
                tf.setText(""); //비우기
            }
        });
        
        list.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                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());
                }
        }
        });
        
        cb.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if(cb.isSelected()) { //checkbox 선택인지->리스트가 다중모드
                    list.setMultipleMode(true);
                }else { //checkbox 해제인지->리스트가 단일모드
                    list.setMultipleMode(false);
                }
            }
        });
        
        add(BorderLayout.NORTH,p1);
        add(BorderLayout.CENTER,p2);
        
        setSize(400,400);
        setVisible(true);
        
        
    }
    
    public static void main(String[] args) {
        new ListTest3(); //생성자 부르기
    }
 
    
}
cs

 

  • 내부 클래스 이용해서 리스트 출력(ListTest2)

 

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
94
95
96
97
98
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 ListTest2 extends JFrame{
    private JTextField tf;
    private JTextArea ta;
    private List list;
    private JCheckBox cb;
    
    public ListTest2() { //생성자 만들기
        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);
        ActionH ah=new ActionH();
        ItemH ih=new ItemH();
        btn.addActionListener(ah); //연결
        tf.addActionListener(ah); //엔터쳐도 값 들어감
        list.addItemListener(ih); //연결
        cb.addItemListener(ih); //연결
        
        add(BorderLayout.NORTH,p1);
        add(BorderLayout.CENTER,p2);
        
        setSize(400,400);
        setVisible(true);
        
        
    }
    
    public static void main(String[] args) {
        new ListTest2(); //생성자 부르기
    }
    //ActionH
    class ActionH implements ActionListener{
 
        
        public void actionPerformed(ActionEvent e) {
            if(tf.getText().isEmpty()) return;
            list.add(tf.getText());
            tf.setText(""); //비우기
        }
        
    }
    //ItemH
    class ItemH implements ItemListener{
 
        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

 

  • 내부 클래스를 이용하여 바나나 체크, 오렌지 체크 프레임 만들기

  • 클래스를 나눠서 사용하면 전역 변수를 쓸 수 없음. 그래서 내부 클래스, 어노니머스 클래스가 필요

  • 내부 클래스의 장점: 부모 클래스의 전역변수를 마치 제 것처럼 쓸 수 있음 (부모 클래스$자신의 클래스 이름으로 표시)

  • 내부 클래스를 이용하여 바나나 체크, 오렌지 체크 프레임 만들기

    • 내부 클래스의 장점: 부모 클래스의 전역변수를 마치 제 것처럼 쓸 수 있음 (부모 클래스$자신의 클래스 이름으로 표시)

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
package swingTest;
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
 
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
 
public class CheckBoxTest_inner2 extends JFrame{
    private JCheckBox cb1;
    private JCheckBox cb2;
    private JTextArea ta;
    private JPanel p1;
    private JPanel p2;
    
    public CheckBoxTest_inner2() {
        setTitle("CheckBoxTest_inner2");
        setLayout(new BorderLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        p1=new JPanel();
        cb1=new JCheckBox("바나나");
        cb2=new JCheckBox("오렌지");
        ta=new JTextArea();
        JScrollPane jsp=new JScrollPane(ta); //만약 매개변수가 10개 20개라면?
        p1.add(cb1); p1.add(cb2);
        
        ItemEventH2 ih=new ItemEventH2();
        cb1.addItemListener(ih);
        cb2.addItemListener(ih);
        
        add(BorderLayout.NORTH,p1);
        add(BorderLayout.CENTER,jsp);
        
        setSize(500,400);
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new CheckBoxTest_inner2();
    }
    
    class ItemEventH2 implements ItemListener{
 
        @Override
        public void itemStateChanged(ItemEvent e) {
            JCheckBox cb=(JCheckBox)e.getSource();
            if(cb.isSelected()) {
                ta.append(cb.getText()+"선택\n");
                ta.setBackground(Color.green);
            }else {
                ta.append(cb.getText()+"선택해제\n");
                ta.setBackground(Color.white);
            }
        }
        
        
    }
    
}
cs

 

 

 

  • 체크박스 테스트 클래스
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
package swingTest;
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
 
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
 
public class CheckBoxTest_inner extends JFrame{
    private JCheckBox cb1;
    private JCheckBox cb2;
    private JTextArea ta;
    private JPanel p1;
    private JPanel p2;
    
    public CheckBoxTest_inner() {
        setTitle("CheckBoxTest_inner");
        setLayout(new BorderLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        p1=new JPanel();
        cb1=new JCheckBox("바나나");
        cb2=new JCheckBox("오렌지");
        ta=new JTextArea();
        JScrollPane jsp=new JScrollPane(ta); //만약 매개변수가 10개 20개라면? 
        p1.add(cb1); p1.add(cb2); 
        
        ItemEventH ih=new ItemEventH(ta); //매개변수를 이용하여 연결 시킴
        cb1.addItemListener(ih);
        cb2.addItemListener(ih);
        
        add(BorderLayout.NORTH,p1);
        add(BorderLayout.CENTER,jsp);
        
        setSize(500,400);
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new CheckBoxTest_inner();
    }
    
    
}
 
cs

 

 


  • 아이템이벤트 클래스

 

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
package swingTest;
 
import java.awt.Color;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
 
import javax.swing.JCheckBox;
import javax.swing.JTextArea;
 
public class ItemEventH implements ItemListener{
    JTextArea ta;
    public ItemEventH(JTextArea ta) {
        this.ta=ta;
    }
 
 
    @Override
    public void itemStateChanged(ItemEvent e) {
        JCheckBox cb=(JCheckBox)e.getSource();
        if(cb.isSelected()) {
            ta.append(cb.getText()+"선택\n");
            ta.setBackground(Color.green);
        }else {
            ta.append(cb.getText()+"선택해제\n");
            ta.setBackground(Color.white);
        }
    }
    
}
 
cs
  • 바나나 선택, 오렌지 선택 체크박스 만들고 리스트에 체크한대로 글자 출력, 배경색상 바꾸기 (CheckBoxTest)

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

    • 생성자 만들기

      • 프레임 제목은 CheckBoxTest

      • 레이아웃은 BorderLayout

      • 닫았을때 프레임이 종료되도록 setDefaultColoseOpration 부르기

 

      • 패널1 생성

      • 체크박스2개 (바나나, 오렌지) 생성

      • 패널1에 체크박스 2개 붙이기

 

      • 패널 2 생성 (리스트가 붙을 것이고 화면에 꽉 채울 것이므로 GridLayout을 매개변수로.

      • 리스트 생성

      • 패널 2에 리스트 붙이기

 

      • 체크박스와 리스트는 ITemListener임. 체크박스 두개와 리스트에 addITemLister 메소드 생성

 

      • add(BorderLayout.North,패널1);

      • add(BorderLayout.Center,패널2);

 

      • 프레임 사이즈 주기

      • 프레임 보이도록 하기

 

      • 체크박스와 리스트는 itemStateChanged 메소드를 생성해줘야함. 아이템 이벤트 e는 JCheckBox형의 cb 객체에 넣음 (오브젝트형의 obj 개체로 안만들어도 됨. 아까는 체크박스 외에도 있었으니까)

      • 바나나 선택, 바나나 선택해제, 오렌지 선택, 오렌지 선택해제 총 4가지의 선택지가 있음. cb가 선택되었다면 (isSelected()) => 리스트에 체크박스의 글자(바나나, 오렌지)에 "선택"을 더해서  붙이던지, "선택해제"를 더해서 리스트에 붙이던지 if/else문으로 나누면 됨

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
package swingTest;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class CheckBoxTest extends JFrame implements ItemListener {
     private JCheckBox cb1;
     private JCheckBox cb2;
     private JTextArea ta;
     private JPanel p1;
     private JPanel p2;
     
     public CheckBoxTest() {
          setTitle("CheckBoxTest");
          setLayout(new BorderLayout());
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          
          p1=new JPanel();
          cb1=new JCheckBox("바나나");
          cb2=new JCheckBox("오렌지");
          ta=new JTextArea();
          JScrollPane jsp=new JScrollPane(ta);
          p1.add(cb1); p1.add(cb2);
          
          cb1.addItemListener(this);
          cb2.addItemListener(this);
          
          add(BorderLayout.NORTH,p1);
          add(BorderLayout.CENTER,jsp);
          
          setSize(500,400);
          setVisible(true);
     }
     
     public static void main(String[] args) {
          new CheckBoxTest();
     }
     
     @Override
     public void itemStateChanged(ItemEvent e) {
          JCheckBox cb=(JCheckBox)e.getSource();
          if(cb.isSelected()) {
              ta.append(cb.getText()+"선택\n");
              ta.setBackground(Color.green);
          }else {
              ta.append(cb.getText()+"선택해제\n");
              ta.setBackground(Color.white);
          }
     }
}
cs

  • 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

 

 

  • BorderLayout 이용하여 계산기 만들기
  • BorderLayout: North, South, Center, East, West

 

 

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
package swingTest;
 
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
public class CalTest_Border extends JFrame implements ActionListener {
    private JTextField tf1, tf2, tf3;
    
    public CalTest_Border() {
        setTitle("계산기 BorderLayout");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        
        JPanel p1=new JPanel();
        JPanel p2=new JPanel();
        JPanel p3=new JPanel();
        
        tf1=new JTextField(5); //숫자 1
        tf2=new JTextField(5); //숫자 2
        tf3=new JTextField(15); //결과
        
        JButton b1=new JButton("+");
        JButton b2=new JButton("-");
        JButton b3=new JButton("*");
        JButton b4=new JButton("/");
        
        p1.add(new JLabel("숫자1"));
        p1.add(tf1);
        p1.add(new JLabel("숫자2"));
        p1.add(tf2);
        p2.add(b1); p2.add(b2); p2.add(b3); p2.add(b4);
        p3.add(new JLabel("결과"));
        p3.add(tf3);
        
        add(BorderLayout.NORTH,p1);
        add(BorderLayout.CENTER,p2);
        add(BorderLayout.SOUTH,p3);
        
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);
        b4.addActionListener(this);
        
        setSize(400,200);
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new CalTest_Border();
    }
    
    
    @Override
    public void actionPerformed(ActionEvent e) {
        String str=e.getActionCommand();
        try {
        int a= Integer.parseInt(tf1.getText());
        int b= Integer.parseInt(tf2.getText());
        
        switch(str) {
        case "+" : tf3.setText(String.valueOf(a+b)); break;
        case "-" : tf3.setText(a-b+""); break//문자를 더하면 자동적으로 문자로 바뀜
        case "*" : tf3.setText(a*b+""); break;
        case "/" : tf3.setText(a/b+""); break
            }
        }catch (NumberFormatException n) {
            tf3.setText("숫자를 입력하세요");
        }catch (ArithmeticException a) {
            tf3.setText("0으로 나눌 수 없습니다.");
        }
        
    }
    
}
 
cs

 

 

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
package swingTest;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class CalTest extends JFrame implements ActionListener {
     private JTextField tf1, tf2, tf3;
     
     public CalTest() {
          setTitle("계산기");
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setLayout(new FlowLayout());
          tf1=new JTextField(5); //숫자 1
          tf2=new JTextField(5); //숫자 2
          tf3=new JTextField(20); //결과
          
          JButton b1=new JButton("+");
          JButton b2=new JButton("-");
          JButton b3=new JButton("*");
          JButton b4=new JButton("/");
          
          b1.addActionListener(this);
          b2.addActionListener(this);
          b3.addActionListener(this);
          b4.addActionListener(this);
          
          add(new JLabel("숫자1"));
          add(tf1);
          add(new JLabel("숫자2"));
          add(tf2);
          add(b1); add(b2); add(b3); add(b4);
          add(new JLabel("결과"));
          add(tf3);
          
          setSize(700,100);
          setVisible(true);
     }
     
     public static void main(String[] args) {
          new CalTest();
     }
     
     
     @Override
     public void actionPerformed(ActionEvent e) {
          String str=e.getActionCommand();
          try {
          int a= Integer.parseInt(tf1.getText());
          int b= Integer.parseInt(tf2.getText());
          
          switch(str) {
          case "+" : tf3.setText(String.valueOf(a+b)); break;
          case "-" : tf3.setText(a-b+""); break//문자를 더하면 자동적으로 문자로 바뀜
          case "*" : tf3.setText(a*b+""); break;
          case "/" : tf3.setText(a/b+""); break;
              }
          }catch (NumberFormatException n) {
              tf3.setText("숫자를 입력하세요");
          }catch (ArithmeticException a) {
              tf3.setText("0으로 나눌 수 없습니다.");
          }
          
     }
     
}
cs

 

  • Swing 이용하여 컴포넌트 3개 만들어서 Field에서 글을 작성해서 버튼을 누르면 Area에 나타내기

 

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
package swingTest;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class SwingTest extends JFrame implements ActionListener{
     private JTextField tf1;
     private JTextArea ta;
     
     public SwingTest() {
          setTitle("연습");
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //X표시를 누르면 JFrame 종료
          setLayout(new FlowLayout());
          tf1=new JTextField(20);
          JButton btn=new JButton("클릭");
          ta=new JTextArea(520);
          btn.addActionListener(this);
          add(tf1);
          add(btn);
          add(ta);
          setSize(500,500);
          setVisible(true);
          
     }
     
     public static void main(String[] args) {
          new SwingTest();
     }
     @Override
     public void actionPerformed(ActionEvent e) {
          ta.append(tf1.getText()+"\n");
          tf1.setText("");
          
     }
 
}
cs

 

 

 

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
package com.oracle.namecard;
//테이블 NAMECARD의 열들을 멤버변수로 하는 클래스 Namecard
public class Namecard {
    private int no;
    private String name;
    private String mobile;
    private String email;
    private String company;
    
    public Namecard() {}
    
    public Namecard(String name, String mobile, 
            String email, String company) {
        this.name = name;
        this.mobile = mobile;
        this.email = email;
        this.company = company;
    }
    //필드변수 초기화 생성자 (no 있음) => dao의 insert메소드 참고
    public Namecard(int no, String name, 
            String mobile, String email, String company) {
        this.no = no;
        this.name = name;
        this.mobile = mobile;
        this.email = email;
        this.company = company;
    }
    // 멤버변수들을 getter/setter 세팅
    public int getNo() {
        return no;
    }
    public void setNo(int no) {
        this.no = no;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getCompany() {
        return company;
    }
    public void setCompany(String company) {
        this.company = company;
    }
    //toString()메소드는 클래스 변수들을 일렬로 문자열로 만들어 리턴
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("[NO: ");
        sb.append(no);
        sb.append("] ");
        sb.append(name);
        sb.append(" ,Mobile: ");
        sb.append(mobile);
        sb.append(" ,Email: ");
        sb.append(email);
        sb.append(" ,Company: ");
        sb.append(company);
     // 멤버변수의 값들을 모아서 하나의 문자열로 리턴
        return sb.toString();
    }
    
}
 
cs

 

 


 

 

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package com.oracle.namecard;
 
import java.sql.*;
import java.util.ArrayList;
 
public class NamecardDao {
    //DAO: data access object=>데이터에 접근하는 객체
    
    static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:XE";  
    static final String USER = "scott";
    static final String PASSWORD = "1234";
    
    //1. 드라이버 로드를 퍼블릭 메소드로 정의
    public NamecardDao() {
        try { // 오라클 DB 드라이버 로드
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    private Connection getConnection() throws SQLException {
        // DB 연결을 메소드로 만들기
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
            //먼저 ResultSet 이 널값이 아니면 종료, 다음 Statement 종료, 마지막으로 커넥션 종료
    private void close(ResultSet rs, PreparedStatement pstmt, Connection con) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    // 입력 메소드
    public void insert(Namecard card) {
        Connection con = null;
        PreparedStatement pstmt = null;
        
        String sql = "INSERT INTO namecard VALUES (CARD_NO.NEXTVAL, ?, ?, ?, ?)";
 
        try {
            //DB 연결 메소드
            con = getConnection();
            pstmt = con.prepareStatement(sql);
            pstmt.setString(1, card.getName());
            pstmt.setString(2, card.getMobile());
            pstmt.setString(3, card.getEmail());
            pstmt.setString(4, card.getCompany());
            pstmt.executeUpdate();
            con.commit(); //데이터 저장
            System.out.println("입력 완료!");
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println(sql);
        } finally {
            close(null, pstmt, con);
        }
    }
    
    //번호 no 행 삭제    
    public void delete(int no) {
       //작성하기
        Connection con=null;
        PreparedStatement pstmt=null;
        
        String sql="DELETE FROM namecard WHERE NO=?";
        
        try {
            con=getConnection(); 
            pstmt=con.prepareStatement(sql); //sql준비
            pstmt.setInt(1,no);
            pstmt.executeUpdate(); //sql실행
            con.commit(); //데이터저장
            System.out.println("삭제완료!");
        } catch (SQLException e) {
        e.printStackTrace();
        System.out.println(sql);
        } finally {
            close(null,pstmt,con);
        }
    }
    
    //번호 no 행 검색
    public Namecard selectOne(int no) {
       //작성하기
        return null;
    }
    
    //이름으로 찾기
    public ArrayList<Namecard> selectByKeyword(String keyword) {       
        ArrayList<Namecard> matched = new ArrayList<Namecard>();
        // 작성하기  
        return matched;
    }
    
    //Namecard의 모든 행/열을 가져오기 번호순으로 
    public ArrayList<Namecard> selectAll() {
        ArrayList<Namecard> all = new ArrayList<Namecard>();
        // 작성하기
        return all; 
    }        
    
    //수정하기
    public void update(Namecard card) {
        //작성하기
    }
 
}
 
cs

 

 

 


 

 

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
package com.oracle.namecard;
 
import java.util.ArrayList;
 
public class Test {
 
    public static void main(String[] args) {
        NamecardDao dao = new NamecardDao();
        //1.insert(Namecard) test: 입력하기
//        Namecard hong = new Namecard("홍길동","010-1234-1234", "hk@naver.com", "부산IT");
//        dao.insert(hong); //실행후 sql developer 확인
//        no 삭제하기
        dao.delete(2);
/*
        //2.selectAll() test: 다 가져와서 리스트에 입력한후 콘솔에 출력
        ArrayList<Namecard> list = dao.selectAll();
        int size = list.size();
        //System.out.println(size);
        for (int i = 0; i < size; i++) {
            Namecard namecard = list.get(i);
            System.out.println(namecard);
        }
 
 
 
        //3.selectByKeyword(String) test: 이름으로 찾기
        ArrayList<Namecard> matched = dao.selectByKeyword("홍길동");
        int length = matched.size();
        System.out.println(length + "명 찾음.");
        for (int i = 0; i < length; i++) {
            Namecard namecard = matched.get(i);
            System.out.println(namecard);
        }
 
 
 
        //4.selectOne(int) test : 번호로 찾기
        Namecard card = dao.selectOne(5);
        System.out.println("5번 찾음");
        System.out.println(card);
 
 
 
        //5.delete(int) test : 번호로 삭제하기
        dao.delete(4);
        ArrayList<Namecard> all = dao.selectAll();
        int cardNum = all.size();
        for (int i = 0; i < cardNum; i++) {
            Namecard namecard = all.get(i);
            System.out.println(namecard);
        }
 
 
      
        //6. update(Namecard) test :  card의 no번호와 같은 NAMECARD 행을  이름, 전화번호, 이메일, 회사 업데이트(수정하기)
        Namecard card = dao.selectOne(5);
        System.out.println(card);
        card.setEmail("alison@ggmail.org");
        card.setMobile("222-2222-2222");
        dao.update(card);
        System.out.println(card);
*/
    }
}
 
cs

'Learning > SQL' 카테고리의 다른 글

수강편람 테이블에서 과목별 현재 수강인원도 함께 출력하기  (0) 2021.03.08
PreparedStatement  (0) 2020.06.23
JDBC SELECT  (0) 2020.06.23
JDBC INSERT  (0) 2020.06.23
JDBC Test  (0) 2020.06.23

+ Recent posts