Java - JFrame,ActionListener

2020. 7. 7. 22:49Java

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
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.awt.Component;
 
public class Ex extends JFrame {
    JButton btnNorth, btnSouth, btnCenter, btnEast, btnWest;
 
    public Ex() {
        showframe();
    }
 
    private void showframe() {
        setBounds(500400300300);
        setTitle("Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        btnNorth = new JButton("NORTH");
        getContentPane().add(btnNorth, BorderLayout.NORTH);
 
        btnCenter = new JButton("CENTER");
        getContentPane().add(btnCenter, BorderLayout.CENTER);
 
        btnWest = new JButton("WEST");
        getContentPane().add(btnWest, BorderLayout.WEST);
 
        btnEast = new JButton("EAST");
        getContentPane().add(btnEast, BorderLayout.EAST);
 
        btnSouth = new JButton("SOUTH");
 
        getContentPane().add(btnSouth, BorderLayout.SOUTH);
 
        // 버튼 5개에 대한 공통 리스너 연결
        btnNorth.addActionListener(listener);
        btnCenter.addActionListener(listener);
        btnWest.addActionListener(listener);
        btnEast.addActionListener(listener);
        btnSouth.addActionListener(listener);
 
//        setVisible(true);
 
    }
 
    // 각 버튼을 구별하여 메세지 출력 - 4단계. 인스턴스 익명 내부 클래스 형태로 정의
    ActionListener listener = new ActionListener() {
 
        @Override
        public void actionPerformed(ActionEvent e) {
//            System.out.println("버튼클릭");
            // 5개의 버튼을 각각 구별하여 버튼에 따라 서로 다른 메세지 출력
            // ->actionPerformed() 메서드 파라미터로 전달된 ActionEvent 객체를 사용하여
            // 1)getActionCommand() : 해당 컴포넌트의 텍스트 출력
            // 2)getSource() : 해당 컴포넌트의 객체 정보 출력
            // -> 컴포넌트 객체가 저장된 참조변수와 비교가능
//            System.out.println(e.getActionCommand());//해당 버튼의 텍스트 출력
//            System.out.println(e.getSource());//해당객체 정보출력
 
            // if문을 사용하여 클릭된 버튼객체의 주소를 버튼객체 참조변수와 비교
            if (e.getSource() == btnCenter) {
                System.out.println("CENTER 클릭됨");
            } else if (e.getSource() == btnNorth) {
                System.out.println("NORTH 클릭됨");
            } else if (e.getSource() == btnSouth) {
                System.out.println("South 클릭됨");
            } else if (e.getSource() == btnEast) {
                System.out.println("East 클릭됨");
            } else if (e.getSource() == btnWest) {
                System.out.println("West 클릭됨");
            }
        }
    };
 
    public static void main(String[] args) {
        Ex ex = new Ex();
        ex.setVisible(true);
 
    }
 
}
 
 
cs

JFrame을 활용하기 위해 버튼을 눌렀을 경우 출력문이 출력되게 해 보는 시간을 가졌는데

if문을 사용하여 getSource()메서드를 통해 버튼 객체들의 주소를 버튼 객체의 참조 변수와 비교를 해서 

하나의 클래스안에서 정의를 해놓고 버튼에는 ActionListener 타입 클래스명만 add 해주면 간단하게 버튼을 눌렀을 경우에 여러 버튼을 따로 정의하지 않아도 간편하게 따로따로 출력이 될 수 있게 해 보았다.

생각보다 많이 간단하니 잊어 먹지 않고 잘사용해보아야 겠다.

'Java' 카테고리의 다른 글

Java - Layout을 활용한 계산기  (1) 2020.07.07
Java - Layout,JTextArea,JTextField,JPanel  (0) 2020.07.07
Java - InnerClass  (0) 2020.07.06
Java - JFrame  (0) 2020.07.06
Java - javax.swing, GUI,JFrame  (0) 2020.07.02