package CHAPTER11;

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

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

	public LAB_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();
	}
}