본문 바로가기

<자바> ActionListener 어떻게 사용하는가?

 

 

오늘은 자바에서 사용하는

ActionListener을 어떻게 사용하는가?

에 대해서 같이 알아보도록 하겠습니다.

 

 

저 같은 경우에는 처음에 ActionListener을 봤을 때에

전혀 이해가 되지 않았는데, 자주 보고 또 타이핑을

하다 보니 어느새 익숙해져서 저도 모르게

이해가 되어버렸습니다.

 

 

하지만 이해하기까지 시행착오가 많았기에

최대한 간단하게 알려드리겠습니다.

 

 

 

 

자 여기서 왼쪽 아래에 있는

"Plus" 버튼을 누르면 화면 중앙에 있는

숫자가 하나씩 올라가는 코드를

작성하려고 합니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                
                // btnPlus를 선택했을때 
                if(btnPlus.equals(ae.getSource())){
                    
                    String strNum = lblNum.getText();
                    // 숫자를 증가시키기 위해서 문자형태인 strNum을
                    // 정수 형태로 변환시킵니다.
                    int num = Integer.parseInt(strNum);
                    num++;
                    
                    // JLabel안에 입력하는 문자는 String이기 때문에
                    // 정수의 형태인 num을 String의 형태로 변환시킵니다.
                    strNum = String.valueOf(num);
                    lblNum.setText(strNum);
                }
            }
        };
        btnPlus.addActionListener(listener);
cs

 

 

"ActionListener"이라는 interface 안에

actionPerformed@Override해서

해당 메소드안에 실행코드를 입력하시면

지정한 Component의 액션이 발생했을 때,

실행코드가 작동하게 됩니다.

 

 

<전체 코드>

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
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
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;
 
 public class ActionListenerEx extends JFrame  {
 
    private JLabel lblNum;
    private JButton btnPlus;
    private JButton btnMinus;
    private JButton btnReset;
    
    public ActionListenerEx() {
        init();
        setDisplay();
        addListener();
        showFrame();
    }
    
    // 구성
    private void init() {
        
        lblNum = new JLabel("0", JLabel.CENTER);
        lblNum.setText("0");
        lblNum.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 40));
 
        btnPlus = new JButton();
        btnPlus.setText("Plus");
        btnMinus = new JButton();
        btnMinus.setText("Minus");
        btnReset = new JButton();
        btnReset.setText("Reset");
        
    }
    // 배치
    private void setDisplay() {
        
        JPanel pnlSouth = new JPanel(new GridLayout(1,0));
        pnlSouth.add(btnPlus);
        pnlSouth.add(btnMinus);
        pnlSouth.add(btnReset);
        
        add(lblNum, BorderLayout.CENTER);
        add(pnlSouth, BorderLayout.SOUTH);
 
    }
    
    private void addListener() {
        
        // ActionListener 객체를 생성하고
        // 인터페이스 안에 있는 메소드를 사용하기 위해
        // @Override을 사용합니다.
        // actionPerformed 라고 적힌 이 메소드안에
        // 해당 Component를 선택했을때, 실행되는
        // 코드를 작성하시면 됩니다.
        
        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                
                // btnPlus를 선택했을때 
                if(btnPlus.equals(ae.getSource())){
                    
                    String strNum = lblNum.getText();
                    // 숫자를 증가시키기 위해서 문자형태인 strNum을
                    // 정수 형태로 변환시킵니다.
                    int num = Integer.parseInt(strNum);
                    num++;
                    
                    // JLabel에 들어가는 파라미터값은 String이기 때문에
                    // int 형태인 num을 String의 형태로 변환합니다.
                    strNum = String.valueOf(num);
                    lblNum.setText(strNum);
                }
                
                if(btnMinus.equals(ae.getSource())){
                    String strNum = lblNum.getText();
                    int num = Integer.parseInt(strNum);
                    num--;
                    strNum = String.valueOf(num);
                    lblNum.setText(strNum);
                }
                
                if(btnReset.equals(ae.getSource())){
                    lblNum.setText("0");
                }
            }
        };
        
        // 위에서 해당 Component를 실행했을때,
        // 코드를 작성했다면 마무리로
        // addActionListener(listener); 추가 필요
        // 이를 추가하지 않을시에는 해당 액션이 발생하지 않습니다.
        
        btnPlus.addActionListener(listener);
        btnMinus.addActionListener(listener);
        btnReset.addActionListener(listener);
        
    }
        
    // 프레임 설정
    private void showFrame() {
        setTitle("Counter");
        setSize(300,400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    // 
    public static void main(String[] args)  {
        new ActionListenerEx();
    }
}
 
 
 
cs

 

93 DL

Develop Life