스윙 컴포넌트의 이벤트

·2025년 6월 1일

Power Java

목록 보기
58/75

10.3 스윙 컴포넌트의 이벤트

-스윙 컴포넌트가 발생하는 이벤트는
모든 컴포넌트가 공통적으로 지원하는 저수준 이벤트
일부 컴포넌트만 지원하는 의미적 이벤트로 나눌 수 있다.

저수준 이벤트

-모든 컴포넌트에서 발생된다.
ex) 마우스나 키보드로부터 발생되는 이벤트

의미적 이벤트

-일부 컴포넌트에서만 발생한다.
ex) 액션 이벤트

*웬만하면 의미적 이벤트를 처리하는 것이 좋다.


액션 이벤트

-버튼이 발생하는 이벤트를 처리할 때 ActionListener 인터페이스를 구현하는데,
이때 호출되는 메소드가 actionPerformed()라는 추상 메소드이다.

  • 사용자가 버튼을 클릭하는 경우
  • 사용자가 메뉴 항목을 선택하는 경우
  • 사용자가 텍스트 필드에서 엔터키를 누르는 경우
    모두 액션 이벤트가 발생한다.
// 소스를 입력하고 Ctrl+Shift+O를 눌러서 필요한 파일을 포함한다.
public class ChangeBackground extends JFrame {
    private JButton button1;
    private JButton button2;
    private JPanel panel;

    MyListener listener = new MyListener(); // 리스너 객체를 미리 생성시켜 놓는다.

    public ChangeBackground() {
        this.setSize(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("이벤트 예제");

        panel = new JPanel();

        button1 = new JButton("노란색");
        button1.addActionListener(listener); // 두 개의 버튼에 동일한 이벤트 리스너 객체를 등록한다.
        panel.add(button1);

        button2 = new JButton("핑크색");
        button2.addActionListener(listener);
        panel.add(button2);

        this.add(panel);
        this.setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    private class MyListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == button1) { // getSource()를 이용하여 이벤트 소스를 찾는다.
                panel.setBackground(Color.YELLOW);
            } else if (e.getSource() == button2) {
                panel.setBackground(Color.PINK);
            }
        }
    }

    public static void main(String[] args) {
        ChangeBackground t = new ChangeBackground();
    }
}


1. ActionEvent
2. ActionListener 인터페이스
actionPerformed(ActionEvent e) 메소드를 오버라이딩해야 함.
3. ActionEvent 객체의 getSource() 메소드를 사용함.
=> 이 메소드는 이벤트를 발생시킨 컴포넌트(버튼)을 반환함.

0개의 댓글