用java写一个程序:用鼠标可以在桌面上任意移动图片1,并且把图片1移到图片2上为正确后,图片1不可再移动
时间: 2024-10-16 12:15:22 浏览: 14
在Java中,我们可以利用Swing库或JavaFX库来实现这样的功能。这里我将提供一个基于Swing的例子,因为Swing对桌面操作支持较好。我们将创建两个JPanel代表图片,然后监听鼠标的移动事件来实现图片的移动。
首先,导入必要的包并设置一些基础类:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class ImageMover extends JFrame {
private JPanel img1, img2;
private int x1 = 0, y1 = 0; // 图片1的初始位置
private boolean isMoved = false; // 标记图片1是否已经移动到图片2的位置
public ImageMover() {
initUI();
}
private void initUI() {
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
img1 = new JPanel(new BorderLayout());
img1.setBackground(Color.WHITE);
img1.setBounds(0, 0, 150, 150);
img1.addMouseListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
if (!isMoved && e.getX() > 150 && e.getY() > 150) { // 图片1移动到图片2区域
setImg2Location(e.getX(), e.getY()); // 设置img2的位置
isMoved = true;
}
}
});
img2 = new JPanel();
img2.setBackground(Color.BLACK);
img2.setBounds(160, 160, 150, 150); // 初始位置
add(img1, BorderLayout.NORTH);
add(img2, BorderLayout.CENTER);
setLocationRelativeTo(null);
setVisible(true);
}
private void setImg2Location(int newX, int newY) {
Point oldPos = img2.getLocationOnScreen(); // 获取旧位置
img2.setLocation(newX - oldPos.x, newY - oldPos.y); // 移动图片2
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ImageMover();
}
});
}
}
```
在这个程序中,我们创建了两个JPanel作为图片容器,当鼠标移动到`img1`的右侧下角并且已放置在`img2`区域内时,`img1`会被移动到`img2`的位置。一旦`img1`被移动,它就不能再次移动。
阅读全文