package CHAP10;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

public class LAB12_02_UIDesignTool extends JFrame {
    private JPanel designPanel;
    private ArrayList<JComponent> components;

    public LAB12_02_UIDesignTool() {
        setTitle("UI Design Tool");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        components = new ArrayList<>();

        // 디자인 패널 설정
        designPanel = new JPanel(null);
        designPanel.setBackground(Color.LIGHT_GRAY);
        add(designPanel, BorderLayout.CENTER);

        // 버튼 추가
        JButton addButton = new JButton("Add Button");
        addButton.addActionListener(e -> addComponent(new JButton("Button")));

        // 레이아웃 초기화 버튼
        JButton clearButton = new JButton("Clear Layout");
        clearButton.addActionListener(e -> clearLayout());

        // 컨트롤 패널 설정
        JPanel controlPanel = new JPanel();
        controlPanel.add(addButton);
        controlPanel.add(clearButton);
        add(controlPanel, BorderLayout.NORTH);
        
        setVisible(true);
    }

    // 새 컴포넌트(버튼)를 추가하고 드래그 기능을 설정하는 메서드    
    private void addComponent(JComponent component) {
        
component.setBounds(50, 50, 100, 50); 

        // 마우스 클릭 이벤트 처리 (버튼 드래그를 위한 초기 클릭 위치 저장)
        component.addMouseListener(new MouseAdapter() {
            Point initialClick;

            @Override
            public void 
mousePressed(MouseEvent e) {
              initialClick = e.getPoint();
              
component.getParent().setComponentZOrder(component, 0);
            }
        });
        
        // 마우스 드래그 이벤트 처리(버튼 이동)
        component.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            
public void mouseDragged(MouseEvent e) {
                int deltaX = e.getX() - component.getWidth() / 2;
                int deltaY = e.getY() - component.getHeight() / 2;
                component.setLocation(component.getX() + deltaX, component.getY() + deltaY);
            }
        });

        designPanel.add(component);
        components.add(component);
        designPanel.repaint(); // 패널 다시 그리기
    }

    // 패널의 모든 컴포넌트를 제거하고 초기화하는 메서드
    private void clearLayout() {
        designPanel.removeAll();  // 패널의 모든 컴포넌트 제거
        components.clear();       // 버튼 리스트 초기화
        designPanel.revalidate();  // 레이아웃 갱신
        designPanel.repaint();    // 화면 다시 그리기
        JOptionPane.showMessageDialog(this, "All components have been cleared!");
    }

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