Java实现一张图片拖拽到另一张图片位置可以使用Java Swing中的Drag and Drop API和MouseListener。以下是一个简单的示例代码:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.event.*;
public class ImageDragAndDrop extends JFrame implements DragGestureListener, DragSourceListener, DropTargetListener, MouseListener {
private JLabel sourceImageLabel;
private JLabel targetImageLabel;
public ImageDragAndDrop() {
super("Image Drag and Drop");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
// 创建源标签并设置为可拖拽
sourceImageLabel = new JLabel(new ImageIcon("source.jpg"));
sourceImageLabel.setTransferHandler(new TransferHandler("icon"));
// 注册拖拽手势监听器
DragSource dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(sourceImageLabel, DnDConstants.ACTION_COPY_OR_MOVE, this);
// 创建目标标签并注册拖放目标监听器和鼠标监听器
targetImageLabel = new JLabel(new ImageIcon("target.jpg"));
targetImageLabel.addMouseListener(this);
targetImageLabel.setTransferHandler(new TransferHandler("icon"));
DropTarget dropTarget = new DropTarget(targetImageLabel, this);
JPanel panel = new JPanel(new GridLayout(1, 2));
panel.add(sourceImageLabel);
panel.add(targetImageLabel);
getContentPane().add(panel, BorderLayout.CENTER);
setVisible(true);
}
@Override
public void dragGestureRecognized(DragGestureEvent dge) {
// 开始拖拽操作
Cursor cursor = null;
if (dge.getDragAction() == DnDConstants.ACTION_COPY) {
cursor = DragSource.DefaultCopyDrop;
}
dge.startDrag(cursor, new TransferableIcon((ImageIcon) sourceImageLabel.getIcon()), this);
}
@Override
public void dragEnter(DragSourceDragEvent dsde) {}
@Override
public void dragOver(DragSourceDragEvent dsde) {}
@Override
public void dropActionChanged(DragSourceDragEvent dsde) {}
@Override
public void dragExit(DragSourceEvent d