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개의 댓글