JAVA/JAVA Swing

Swing - 5 (이벤트 리스너)

tjdudtn 2024. 9. 16. 16:44
package ch05;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
// 이벤트 리스너를 사용하는 방법
// 1. implements ActionListener 사용 하는 방법 
// 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이 눌러지는지 계속 이벤트를 지켜 보고 있어 
		// 이벤트 등록 
		button1.addActionListener(this);
	}
	
	// 코드 테스트 
	public static void main(String[] args) {
		new ColorChangeFrame();
	} // end of main 

	// 약속 되어 있던 추상메서드를 오버라이드 했다. 
	// 이벤트가 발생 되면 이 메서드를 수행해 약속 되어 있음 
	// 단, 어떤 컴포넌트가 이벤트가 할당 되었는지 등록을 먼저 해주어야 한다. 
	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("actionPerformed 메서드 호출()");
		System.out.println(e.toString());
	}
	
} // end of class
package ch05;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ColorChangeFrame2 extends JFrame implements ActionListener  {

	private JPanel panel;
	private JButton button1; 
	private JButton button2; 
	
	public ColorChangeFrame2() {
		initData();
		setInitLayout();
		addEventListener();
	}
	
	private void initData() {
		setSize(500, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout()); // BorderLayout 
		panel = new JPanel();
		panel.setBackground(Color.yellow);
		
		button1 = new JButton("click1");
		button2 = new JButton("click2");
		
	}
	private void setInitLayout() {
		add(button1, BorderLayout.NORTH);
		add(button2, BorderLayout.SOUTH);
		add(panel, BorderLayout.CENTER);
		setVisible(true);
	}
	// 이 메서드에 책임은 이벤트 리스너만 등록 
	private void addEventListener() {
		button1.addActionListener(this);
		button2.addActionListener(this);
	}
	
	// 오버라이드 : 이벤트가 일어나면 호출 되어지는 메서드 
	@Override
	public void actionPerformed(ActionEvent e) {
		Object object = e.getSource();
		// 주소값으로 비교도 가능 
		// 문자열 값으로 비교 가능 
		JButton selectedButton = (JButton)e.getSource();
		if(selectedButton == this.button1) {
			System.out.println("button1 객체가 눌러졌다라고 판명 가능 ");
			panel.setBackground(Color.yellow);
		} else {
			System.out.println("button2 객체가 눌러졌다라고 판명 가능 ");
			panel.setBackground(Color.black);
		}
	}
	
	// 코드 테스트 
	public static void main(String[] args) {
		new ColorChangeFrame2();
	} // end of main 	
}

 

도전 문제 (학생코드 리뷰)

 

package ch05;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ImageChangeFrame extends JFrame implements ActionListener {

    private JButton button1;
    private JButton button2;
    private JButton button3;
    private JLabel panel1;
    private JPanel panel2;

    public ImageChangeFrame() throws MalformedURLException {
        initData();
        setInitLayout();
        addEventListener();
    }

    private void initData() {
        setSize(700, 700);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button1 = new JButton("click1");
        button2 = new JButton("click2");
        button3 = new JButton("click3");
        Icon icon = new ImageIcon("images/kirara.gif");
        panel1 = new JLabel(icon);
        panel1.setSize(500, 500);
        panel1.setLocation(0, 0);
        panel2 = new JPanel();
        panel2.setBackground(Color.yellow);
    }

    private void setInitLayout() {
        add(panel1, BorderLayout.CENTER);
        add(panel2, BorderLayout.SOUTH);
        panel1.setLayout(new FlowLayout(FlowLayout.CENTER));
        panel2.add(button1);
        panel2.add(button2);
        panel2.add(button3);
        setVisible(true);

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

    public static void main(String[] args) {
        try {
            new ImageChangeFrame();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        JButton selectedButton = (JButton) e.getSource();

        if (selectedButton.getText().equals("click1")) {
            panel1.setIcon(new ImageIcon("images/kirara.gif"));
        }
        if (selectedButton.getText().equals("click2")) {
            panel1.setIcon(new ImageIcon("images/set.gif"));
        }
        if (selectedButton.getText().equals("click3")) {
            panel1.setIcon(new ImageIcon("images/sitpo.gif"));
        }
    }
}