package CHAPTER11;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//외부 클래스: 이벤트 리스너 구현
class ButtonClickHandler implements ActionListener {
	private OuterClassEventExample frame; // 프레임 참조

	public ButtonClickHandler(OuterClassEventExample frame) {
		this.frame = frame;
	}

	@Override
	public void actionPerformed(ActionEvent e) {		
		frame.incrementCount(); // 프레임의 숫자 증가 메서드 호출
	}
}

// JFrame을 상속한 클래스
public class OuterClassEventExample extends JFrame {

	private int count = 0; // 숫자 카운트 변수
	private JLabel label; // 숫자를 표시할 레이블

	public OuterClassEventExample() {
		// 프레임 설정
		setTitle("숫자 카운트 예제");
		setSize(300, 200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(null); // 레이아웃 설정 (절대 위치)

		// 레이블 생성
		label = new JLabel("Count: 0");
		label.setBounds(110, 50, 100, 30); // 레이블 위치와 크기 설정
		add(label); // 레이블을 프레임에 추가

		// 버튼 생성
		JButton button = new JButton("Click Me");
		button.setBounds(100, 100, 100, 30); // 버튼 위치와 크기 설정

		// 외부 클래스의 이벤트 리스너 추가
		button.addActionListener(new ButtonClickHandler(this));

		add(button);
		setVisible(true);
	}

	// 숫자를 증가시키는 메서드
	public void incrementCount() {
		count = (count % 100) + 1; // 1부터 100까지 반복
		label.setText("Count: " + count);
	}

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

