[java] 자바 스윙 컴포넌트에서 드래그 앤 드롭 기능을 구현하는 방법을 알려주세요.

먼저, 드래그 앤 드롭을 지원하는 컴포넌트를 만들기 위해 JComponent 클래스를 상속하는 사용자 정의 컴포넌트를 만듭니다. 이 컴포넌트에서 mousePressedmouseReleased 메서드를 재정의하여 드래그 앤 드롭 동작을 처리할 수 있습니다.

아래는 간단한 드래그 앤 드롭 예제 코드입니다.

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

class DraggableComponent extends JComponent {
    int pressX, pressY;

    public DraggableComponent() {
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                pressX = e.getX();
                pressY = e.getY();
            }

            public void mouseReleased(MouseEvent e) {
                int releaseX = e.getX();
                int releaseY = e.getY();

                // 여기서 드롭이 발생했을 때의 동작을 처리합니다
                // 예를 들어, 드래그한 컴포넌트를 새 위치에 놓기
                setLocation(getX() + (releaseX - pressX), getY() + (releaseY - pressY));
            }
        });
    }

    // 다른 컴포넌트와 함께 사용할 때 드래그 앤 드롭을 활성화할 수 있도록 설정하는 메서드
    public void enableDragAndDrop() {
        setTransferHandler(new TransferHandler("text"));
        setDragEnabled(true);
    }
}

public class DragAndDropExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Drag and Drop Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);

        DraggableComponent component = new DraggableComponent();
        component.enableDragAndDrop();
        component.setBounds(50, 50, 50, 50);
        component.setBackground(Color.RED);

        frame.add(component);
        frame.setLayout(null);
        frame.setVisible(true);
    }
}

위 코드에서 DraggableComponent 클래스는 드래그 앤 드롭을 지원하는 컴포넌트를 나타냅니다. mousePressedmouseReleased 메서드를 재정의하여 드래그 중에 컴포넌트의 이동을 처리하고, enableDragAndDrop 메서드는 해당 컴포넌트에서 드래그 앤 드롭을 활성화합니다.

위 예제는 단순히 컴포넌트를 드래그하여 새 위치에 놓는 것을 보여주지만, 실제 애플리케이션에서는 다른 컴포넌트와의 상호작용 및 데이터 전달을 구현할 수 있습니다.