ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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을 정리해보겠다.

    Designed by Tistory.