이벤트 리스너 (Event Listener, 이벤트 핸들러)
- 이벤트의 발생을 감지하고, 이벤트에 대한 처리를 담당하는 객체
- 실행의 흐름을 만들 수 있음
- implements 키워드로 인터페이스를 받지 않고, 구현 클래스를 이용할 수도 있음
· 구현 클래스 관련 설명 : https://young0105.tistory.com/82
ActionListener 인터페이스
- 버튼을 눌렀을 때 이벤트가 발생함
- 해당 클래스는 'ActionListener' 인터페이스가 적용됨
→ 다형성 : 자기 자신의 자료형으로 사용할 수도 있고, ActionListener 타입으로 사용할 수도 있음
- 인터페이스를 불러오면 'actionPerformed' 메서드가 자동으로 호출됨
→ 해당 메서드를 재정의해서, 이벤트 발생 시 실행 코드를 작성할 수 있음
public class 클래스명 extends JFrame implements ActionListener {
// 멤버변수
private JButton button;
// 생성자
public 클래스명() {
initData();
setInitLayout();
addEventListener();
}
// 생성자에 사용할 메서드 1
private void initData() {
// 창 제목, 크기 등 설정
...
// 버튼 인스턴스화
버튼명 = new JButton("텍스트");
}
// 생성자에 사용할 메서드 2
private void setInitLayout() {
// 레이아웃 관련 설정
...
// 컴포넌트 추가
add(버튼명);
setVisible(true);
}
// 생성자에 사용할 메서드 3
private void addEventListener() {
// 이벤트 리스너 등록 (이벤트 발생의 기준)
버튼명.addActionListener(this);
}
// 인터페이스 설정 시, actionPerformed 메서드가 호출됨
@Override
public void actionPerformed(ActionEvent e) {
// 이벤트 발생 시 실행 코드
...
}
public static void main(String[] args) {
// 익명 클래스로 호출
new ColorChangeFrame();
} // end of main
} // end of class
- 예제 : https://young0105.tistory.com/86
# actionPerformed 메서드
- e.getSource() 메서드로 e의 타입을 확인해보면 'Object' 타입이라고 확인됨
→ 코드를 설계할 때 더 편리하게 사용하기 위해 기존의 타입으로 다운 캐스팅할 수 있음
@Override
public void actionPerformed(ActionEvent e) {
// 다운 캐스팅
JButton 변수 = (JButton) e.getSource();
}
KeyListener 인터페이스
- 키보드 자판을 누르거나 뗐을 때 이벤트가 발생함
- 사용될 만한 컴포넌트
· JTextArea
· JTextField
public class 클래스명 extends JFrame implements KeyListener {
// 멤버변수
...
// 생성자
public 클래스명() {
initData();
setInitLayout();
addEventListener();
}
// 생성자에 사용할 메서드 1
private void initData() {
// 창 제목, 크기 등 설정
...
// 컴포넌트 인스턴스화
컴포넌트명 = new 컴포넌트();
}
// 생성자에 사용할 메서드 2
private void setInitLayout() {
// 레이아웃 관련 설정
...
// 컴포넌트 추가
add(컴포넌트명);
setVisible(true);
}
// 생성자에 사용할 메서드 3
private void addEventListener() {
// 이벤트 리스너 등록 (이벤트 발생의 기준)
컴포넌트명.addActionListener(this);
}
// 문자 키를 눌렀을 때 반응함
@Override
public void keyTyped(KeyEvent e) {
}
// 키보드를 눌렀을 때 반응함
@Override
public void keyPressed(KeyEvent e) {
}
// 누르고 있던 키를 뗐을 때 반응함
@Override
public void keyReleased(KeyEvent e) {
}
} // end of class
- 예제 : https://young0105.tistory.com/88
# KeyCode (int 타입)
- 키보드의 자판은 각각 자신의 KeyCode를 가짐
→ e.getKeyCode() 메서드를 통해 가져올 수 있음
- 방향 키의 KeyCode가 Java 내에 상수로 정의되어 있음
위쪽 (↑) | 아래쪽 (↓) | 왼쪽 (←) | 오른쪽 (→) |
KeyEvent.VK_UP | KeyEvent.VK_DOWN | KeyEvent.VK_LEFT | KeyEvent.VK_RIGHT |
# 사용하지 않을 메서드도 재정의해야 하는 것이 싫은 경우
- KeyAdaptor 클래스를 구현 클래스로 사용하면, 원하는 keyEvent만 가져와서 재정의 가능
MouseListener 인터페이스
- 마우스로 클릭하거나 뗐을 때, 마우스 커서가 올라갔거나 벗어났을 때 이벤트가 발생함
// implements 대신 구현 클래스 사용
public class 클래스명 extends JFrame {
// 멤버변수
...
// 생성자
public MouseEventListener1() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
// 창 제목, 크기 등 설정
...
// 컴포넌트 인스턴스화
...
}
private void setInitLayout() {
// 레이아웃 관련 설정
...
// 컴포넌트 추가
...
setVisible(true);
}
private void addEventListener() {
// 대상에 this를 넣으면 창 전체에 대해 이벤트를 감지함
대상.addMouseListener(new MouseListener() {
// 마우스를 클릭하다가 뗐을 때
@Override
public void mouseReleased(MouseEvent e) {
}
// 마우스를 클릭하고 있을 때
@Override
public void mousePressed(MouseEvent e) {
}
// 마우스 커서가 벗어났을 때
@Override
public void mouseExited(MouseEvent e) {
}
// 마우스 커서가 올라갔을 때
@Override
public void mouseEntered(MouseEvent e) {
}
// 마우스로 클릭했을 때
@Override
public void mouseClicked(MouseEvent e) {
}
});
}
}
- 예제 : https://young0105.tistory.com/87
# x 좌표, y 좌표 가져오기
// x 좌표
e.getX();
// y 좌표
e.getY();
// x 좌표, y 좌표를 가져와서 컴포넌트의 위치 설정 가능
컴포넌트명.setLocation(e.getX(), e.getY());
'Java > Swing (GUI)' 카테고리의 다른 글
[Java/Swing] ActionListener - 배경 색 변경하기 (1) | 2023.02.18 |
---|---|
[Java/Swing] 메서드 및 함수 모음 (1) | 2023.02.17 |
[Java/Swing] JLabel 클래스 : 이미지 관련 (0) | 2023.02.16 |
[Java/Swing] 이미지 삽입하기 (0) | 2023.02.14 |
[Java/Swing] paint 메서드 : 도형, 이미지, 문자열 그리기 (0) | 2023.02.14 |