Swing

swing 이벤트 리스너 (ActionListener)

whs5758 2025. 4. 29. 16:46
package _swing2;

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

/**
 * 자바는 단일 상속만을 지원한다. Object 클래스 제외
 * 이벤트 리스너 예제 코드 작성해보기
 */

// ActionListener (인터페이스) -->
public class ColorChangeFrame extends JFrame implements ActionListener {

    private JButton button1;

    public ColorChangeFrame() {
        initData();
        setInitLayout();
        addEventListener();
    }

    private void initData() {
        setSize(500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button1 = new JButton("button1");
    }

    private void setInitLayout() {
        setLayout(new FlowLayout());
        add(button1);
        setVisible(true);
    }

    private void addEventListener() {
        button1.addActionListener(this);
    }

    // 테스트 코드
    public static void main(String[] args) {
        new ColorChangeFrame();
    }

    // 운영체제와 약속되어 있는 추상 메서드를 오버라이드 했다.
    // 이벤트가 발생되면 이 메서드를 자동으로 수행해(콜백)
    // 미리 정해져 있는 정보(객체)를 받을 수 있다.
    // 단, 어떤 컴포넌트가 이벤트를 실행시킬건지 먼저 등록해주어야 한다.
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("actionPerformed() 메서드가 호출되었다");
        System.out.println(e.toString());
    }
}

actionPerformed() 메서드가 호출되었다
java.awt.event.ActionEvent[ACTION_PERFORMED,cmd=button1,when=1745912406983,modifiers=Button1] on javax.swing.JButton[,203,5,77x28,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@c0bece7,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=button1,defaultCapable=true]

package _swing2;

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

public class ColorChangeFrame2 extends JFrame implements ActionListener {

    private JButton button1;
    private JButton button2;
    private JPanel panel;

    public ColorChangeFrame2() {
        initData();
        setInitLayout();
        addEventListener();
    }

    private void initData() {
        setSize(500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        panel = new JPanel();
        button1 = new JButton("클릭1");
        button2 = new JButton("클릭2");
    }

    private void setInitLayout() {
        setLayout(new BorderLayout());

        panel.setBackground(Color.YELLOW);
        add(panel, BorderLayout.CENTER);
        add(button1, BorderLayout.NORTH);
        add(button2, BorderLayout.SOUTH);

        setVisible(true);
    }

    // 이 메서드의 책임은 이번트 리스너만을 등록 처리 한다.
    private void addEventListener() {
        button1.addActionListener(this); // 다형성
        button2.addActionListener(this);
    }


    // 이벤트 리스너 콜백 메서드
    @Override
    public void actionPerformed(ActionEvent e) {
        // JButton 으로 다운 캐스팅
        JButton selectedButton = (JButton) e.getSource();
        System.out.println(selectedButton);
        System.out.println(selectedButton.getText());

        // 같은 객체의 주소값을 가리키는 비교
        if (selectedButton == button1) {
            panel.setBackground(Color.PINK);
        } else if (selectedButton == button2) {
            panel.setBackground(Color.CYAN);
        }
    }

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

 

javax.swing.JButton[,0,0,484x28,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@655c8307,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=클릭1,defaultCapable=true]
클릭1
javax.swing.JButton[,0,433,484x28,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@655c8307,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=클릭2,defaultCapable=true]
클릭2
javax.swing.JButton[,0,0,484x28,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@655c8307,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=클릭1,defaultCapable=true]
클릭1
javax.swing.JButton[,0,433,484x28,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@655c8307,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=클릭2,defaultCapable=true]
클릭2

 

 

'Swing' 카테고리의 다른 글

Swing Key Listener  (0) 2025.04.29
swing 이벤트 리스너 (ActionListener) - 연습  (0) 2025.04.29
이미지 겹쳐보기  (0) 2025.04.29
이미지 올려보기  (1) 2025.04.28
패널 사용해보기  (0) 2025.04.28