GUI 이벤트처리(2)

ChoRong0824·2022년 9월 20일
0

Java_GUI

목록 보기
4/9

인텔리 제이에선, //"" 안에 글자를 넣고 엔터를 누르면 "");이렇게 아래 문장에 소스가 자동으로 추가됌

리스너 등록 메소드가 addXXXListener인 이유?


컴포넌트는 다른 이벤트에 대한 리스너를 동시에 가질 수 있다.

  • JButton.addActionListener(); // Action 리스너
  • JButton.addKeyListener(); // Key 리스너
  • JButton.addFocusListener(); // Focus 리스너

컴포넌트는 한 이벤트에 대해 여러 개의 리스너를 동시에 가질 수 있다.

  • JButton.addActionListener(new MyButtonListener1());
  • JButton.addActionListener(new MyButtonListener2());
  • JButton.addActionListener(new MyButtonListener3());
  • 이때, 리스너는 등록된 반대 순으로 모두 실행된다.

이벤트 리스너는 보통 3가지 방법으로 작성 되는데

내부 클래스(inner class)로 작성되는 것이 가장 많이 사용된다.

  • 클래스 안에 멤버처럼 클래스 작성
  • 이벤트 리스너를 특정 크래스에서만 사용할 때 적합

예제10-1 독립클래스로 Action 이벤트 리스너

package experience;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class IndepClassListener extends JFrame {
    public IndepClassListener() {
        setTitle("Action 이벤트 리스너 예제");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        JButton btn = new JButton("Action");
        btn.addActionListener(new MyActionListener()); //Action 리스너 달기
        c.add(btn);

        setSize(350, 150);
        setVisible(true);
    }

    public static void main(String[] args) {
        new IndepClassListener();
    }

//이 부분은 파일로 작성하여도 됨
    class MyActionListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            JButton b = (JButton) event.getSource();
            if(b.getText().equals("Action"))
                b.setText("액션");
            else
                b.setText("Action");
        }
    }
}
- Action을 누르면 `액션`으로 바뀜

예제 10-2 내부클래스로 Action 만들기

  • Action 리스너를 내부 클래스로 작성
  • private으로 선언하여 InnerClassListener외부에서 사용할 수 없게 함
  • 리스너에서 InnerClassListener의 멤버에 대한 접근 용이

익명 클래스로 이벤트 리스너 작성



예제 10-4 : 마우스로 문자열 이동시키기 - 마우스 이벤트 연습

  • 컨텐트팬의 아무 위치에 마우스 버튼을 누르면 마우스 포인트가 있는 위치로 "hello" 문자열을 옮기는 스윙 응용프로그램을 작성


어댑터(Adapter) 클래스



어댑터 사용 예(Mouse Adapter)



profile
정진, "어제보다 더 나은 오늘이 되자"

0개의 댓글