-
java 리스너 이벤트 처리 방법 (익명 객체, 내부 클래스)JAVA/멀티스레드, 이벤트 2024. 5. 24. 10:02
▤ 목차
💫이벤트 처리
❓이벤트 리스너란?
발생된 이벤트 객체에 반응하여 이벤트를 처리하는 객체를 말한다.
사용자가 버튼을 클릭하거나, 마우스를 움직이거나, 키보드를 누르면 이벤트가 발생한다.
class --Listener implements ActionListener{ public void actionPerformed (ActionEvent e){... //이벤트 객체가 발생하면 호출} }
이벤트를 처리하는 몇가지 방법이 있다.
이 글에서는 이벤트 처리 코드를 정리해보고자 한다.
- inner Class로 받아서 처리하는 방법
- 익명클래스로 처리하는 방법
✔ implements ActionListener 사용
💻 코드로 보기
public class ExEvent extends Frame implements ActionListener { private Button btn1 = new Button("button1"); private Button btn2 = new Button("button2"); public ExEvent() { super("이벤트 연습"); addLayout(); addWindowListener(new WindowAdapter() { //종료버튼 @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } private void addLayout() { add("East", btn1); //frame은 BorderLayout이 기본 add("West",btn2); btn1.addActionListener(this); btn2.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == btn1) { //객체 비교 setTitle("버튼1 클릭"); }else if(e.getSource() == btn2) { setTitle("버튼2 클릭"); } } public static void main(String[] args) { new Event(); } }
👏 결과
✔ 내부클래스 사용(implements)
💻 코드로 보기
public class Event extends Frame implements ActionListener { private Button btn3 = new Button("button3"); public Event() { super("이벤트 연습"); addLayout(); setBounds(200, 200, 400, 400); setVisible(true); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } private void addLayout() { add("South",btn3); btn3.addActionListener(new EventTest()); //내부클래스 사용(implements) } class EventTest implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { // btn3을 클릭하면 수행되는 추상메서드 setTitle("버튼 3을 누르네"); } } public static void main(String[] args) { new Event(); } }
👏 결과
✔ 내부클래스 사용(extends)
💻 코드로 보기
public class Event extends Frame implements ActionListener { private Button btn4 = new Button("button4"); public Event() { super("이벤트 연습"); addLayout(); setBounds(200, 200, 400, 400); setVisible(true); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } private void addLayout() { add("North",btn4); btn4.addMouseListener(new EventTest2()); } class EventTest2 extends MouseAdapter{ @Override //일반 메서드 오버라이딩 public void mouseClicked(MouseEvent e) { //btn4 setTitle("버튼 마우스 이벤트로 btn4 처리"); } } public static void main(String[] args) { new Event(); } }
👏 결과
✔ 내부 무명 클래스 사용
💻 코드로 보기
public class Event extends Frame implements ActionListener { private Button btn5 = new Button("button5"); public Event() { super("이벤트 연습"); addLayout(); setBounds(200, 200, 400, 400); setVisible(true); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } private void addLayout() { add("Center",btn5); btn5.addMouseListener(new MouseAdapter() { // 내부 무명 클래스 사용 @Override public void mouseClicked(MouseEvent e) { // btn5 클릭하면 수행 setTitle("버튼5 클릭"); } }); } public static void main(String[] args) { new Event(); } }
👏 결과
😊정리
익명객체, 내부클래스(구현, 상속), actionListener 일반 구현으로 총 4가지 방법을 알아봤다.
가장 기초정인 방법은 이벤트를 처리하는 인터페이스를 implements 키워드로 가져와 처리하는 방법이다.
abstract 메소드를 모두 정의해야하기 때문에 소스코드가 복잡해질 수 있다.
한번만 사용할 코드이면 익명객체로 만들 수 있다. 일반적으로 안드로이드 프로그램에서 많이 사용하는 방식이다.
그냥 Frame 클래스를 받는 방법도 있지만 JFrame으로 가볍게 만들 수 있다.
다음에는 JFrame을 정리해보겠다.
'JAVA > 멀티스레드, 이벤트' 카테고리의 다른 글
java) Swing 코드 연습 ( JFrame 사용 ) + Mnemonic (0) 2024.05.29 java) 메모장 만들기 2) 나가기, 복사, 붙여 넣기, 잘라내기, 삭제, 글꼴크기, 모달창 띄우기 (0) 2024.05.28 java) 메모장 만들기 3) 윈도우 계산기 띄우기, 브라우저 실행하기, 팝업 메뉴 (+Desktop 클래스 / URI 클래스) (0) 2024.05.28 java) 메모장 만들기 1) 메뉴 + 열기 + 저장 (0) 2024.05.27 GUI / Layout / awt/ 컴포넌트 / 컨테이너 개념정리 (0) 2024.05.23