[java] 자바 스윙 컴포넌트에서 드래그 앤 드롭 기능을 구현하는 방법을 알려주세요.
먼저, 드래그 앤 드롭을 지원하는 컴포넌트를 만들기 위해 JComponent
클래스를 상속하는 사용자 정의 컴포넌트를 만듭니다. 이 컴포넌트에서 mousePressed
및 mouseReleased
메서드를 재정의하여 드래그 앤 드롭 동작을 처리할 수 있습니다.
아래는 간단한 드래그 앤 드롭 예제 코드입니다.
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
클래스는 드래그 앤 드롭을 지원하는 컴포넌트를 나타냅니다. mousePressed
및 mouseReleased
메서드를 재정의하여 드래그 중에 컴포넌트의 이동을 처리하고, enableDragAndDrop
메서드는 해당 컴포넌트에서 드래그 앤 드롭을 활성화합니다.
위 예제는 단순히 컴포넌트를 드래그하여 새 위치에 놓는 것을 보여주지만, 실제 애플리케이션에서는 다른 컴포넌트와의 상호작용 및 데이터 전달을 구현할 수 있습니다.