package CHAPTER11;

import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;

/**
 * 입력 필드가 포커스를 얻거나 잃을 때 배경색을 변경하는 FocusAdapter 예제.
 */
class HighlightFocusAdapter extends FocusAdapter {
    /**
     * 입력 필드가 포커스를 얻었을 때 배경색을 노란색으로 변경.
     * @param e 포커스 이벤트
     */
    @Override
    public void focusGained(FocusEvent e) {
        JTextField field = (JTextField) e.getSource();
        field.setBackground(Color.YELLOW);
    }

    /**
     * 입력 필드가 포커스를 잃었을 때 배경색을 흰색으로 변경.
     * @param e 포커스 이벤트
     */
    @Override
    public void focusLost(FocusEvent e) {
        JTextField field = (JTextField) e.getSource();
        field.setBackground(Color.WHITE);
    }
}

public class LAB_01_FocusAdapterApp extends JFrame {    
    public LAB_01_FocusAdapterApp() {
        setTitle("로그인 필드 포커스 강조");  
        setSize(300, 200);  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        setLocationRelativeTo(null);  

        // 패널 설정 및 레이아웃 구성 (2개의 필드 배치)
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(2, 1));

        // 사용자명 및 비밀번호 필드 생성
        JTextField usernameField = new JTextField("Username");
        JTextField passwordField = new JTextField("Password");

        // FocusAdapter 객체 생성 후 두 개의 필드에 이벤트 리스너 등록
        FocusAdapter focusAdapter = new HighlightFocusAdapter();
        usernameField.addFocusListener(focusAdapter);
        passwordField.addFocusListener(focusAdapter);

        // 패널에 필드 추가 및 프레임에 패널 추가
        panel.add(usernameField);
        panel.add(passwordField);
        add(panel);

        setVisible(true);  // 프레임을 보이도록 설정
    }
    public static void main(String[] args) {
        new LAB_01_FocusAdapterApp(); 
    }
}
