java设置JFrame的移动事件,不穿透到JButton
时间: 2024-05-05 17:22:59 浏览: 166
Java给JFrame窗口设置热键的方法实现
要实现这个功能,你可以在JFrame中添加一个MouseListener来监听鼠标事件,并在mousePressed()方法中记录鼠标点击时的坐标。然后在mouseDragged()方法中计算出鼠标移动的距离,并将JFrame的位置相应地移动。
以下是一个示例代码:
```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MyFrame extends JFrame {
private int mouseX, mouseY;
private JButton button;
public MyFrame() {
super("Move JFrame");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
// 添加一个按钮来测试
button = new JButton("Click me!");
add(button, BorderLayout.CENTER);
// 添加MouseListener来监听鼠标事件
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// 记录鼠标点击时的坐标
mouseX = e.getX();
mouseY = e.getY();
}
});
// 添加MouseMotionListener来监听鼠标移动事件
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e) {
// 计算鼠标移动的距离,并将JFrame位置相应地移动
int deltaX = e.getX() - mouseX;
int deltaY = e.getY() - mouseY;
setLocation(getLocation().x + deltaX, getLocation().y + deltaY);
}
});
}
public static void main(String[] args) {
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
}
```
在这个示例中,我们创建了一个MyFrame类来继承JFrame,并添加了一个按钮和两个MouseListener和MouseMotionListener来监听鼠标事件。在mousePressed()方法中,我们记录了鼠标点击时的坐标,而在mouseDragged()方法中,我们计算了鼠标移动的距离,并将JFrame的位置相应地移动。由于按钮没有添加MouseListener,所以鼠标事件不会穿透到按钮上。
阅读全文