각진 세상에 둥근 춤을 추자
[Java] Swing - 이벤트 본문
이벤트 기반 프로그래밍 (Event Driven Programming)
- 이벤트의 발생에 의해 프로그램의 흐름이 결정되는 방식이다.
이벤트 (Event)
- 컨트롤러와 사용자 간의 수 많은 상호작용을 말한다.
- 종류: 사용자의 입력(마우스 드래그, 클릭, 키보드), 센서 입력, 데이터 송수신 등
이벤트 핸들러 (Event Handler, Event Listener)
- 사용자의 특정 동작에따라 처리되는 이벤트 메서드를 말한다.
- 클래스로 작성해야 한다.
// 이벤트 리스너 등록 메서드
Component.addXXXListener(listener)
Componenet.addMouseListener()
Componenet.addActionListener()
이벤트 처리 순서
- 이벤트 발생 ( ex. 마우스, 키보드 입력 등)
- 이벤트 객체 생성 (발생한 이벤트에 대한 정보를 가진 객체)
- 이벤트 리스너 찾기
- 이벤트 리스너 호출
- 이벤트 리스너 실행
이벤트 객체 및 소스의 종류
[예제1] ActionListener (어려운 방법)
package event;
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.border.Border;
public class ActionEvent_ex extends JFrame{
public ActionEvent_ex(String title, int width, int height) {
setTitle(title);
setSize(width, height);
setLocation(2500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 레이아웃
setLayout(new FlowLayout());
// 컴포넌트 추가
JButton btn = new JButton("Action");
MyActionListener listener = new MyActionListener();
btn.addActionListener(listener);
add(btn);
setVisible(true);
}
public static void main(String[] args) {
new ActionEvent_ex("Action Event example", 300, 200);
}
}
class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
String n =b.getText();
if(n.equals("Action")) {
b.setText("액션!");
}else {
b.setText("Action");
}
}
}
[예제2] ActionListener (보편적인 방법)
package event;
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.border.Border;
public class MyActionEvent extends JFrame implements ActionListener {
// btn: 멤버변수
public JButton btn;
public MyActionEvent(String title, int width, int height) {
setTitle(title);
setSize(width, height);
setLocation(2500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 레이아웃
setLayout(new FlowLayout());
// 컴포넌트 추가
// btn: 지역변수
btn = new JButton("Action");
btn.addActionListener(this);
add(btn);
setVisible(true);
}
public static void main(String[] args) {
new MyActionEvent("Action Event example", 300, 200);
}
@Override
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
if(obj == btn) {
System.out.println(btn.getText());
}
}
}
'Java' 카테고리의 다른 글
[Intellij] javac 명령어 실행 + 에러 (error: does not exist, cannot find symbol) (0) | 2024.04.17 |
---|---|
[InteillJ] InteillJ Maven WAR 파일 생성 (0) | 2024.03.05 |
[Java] Swing - Container Layout Manager (0) | 2022.10.10 |
[Java] Swing - JFrame (0) | 2022.10.10 |
[Java] GUI 프로그래밍 (0) | 2022.10.10 |