在Swing中怎样才能把鼠标的活动范围限制在某个窗体内

lyshine66 2007-10-23 07:40:26
初学java Swing,做了一个程序想把鼠标限制在某个窗体内,但不知道具体怎么实施,请高手指教!
...全文
186 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddpie 2007-10-23
  • 打赏
  • 举报
回复
我写了一段不是很完美的代码,参考一下吧^o^

package com.ddpie;

import java.awt.AWTException;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Robot;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;

public class TestCursorFrame {

public static void main(String[] args) throws AWTException{
final int WIDTH = 300;
final int HIGHT = 200;

final JFrame frame = new JFrame();
frame.setSize(WIDTH, HIGHT);
frame.setLocation(200, 200);
frame.setUndecorated(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice screen = env.getDefaultScreenDevice();
final Robot robot = new Robot(screen);

frame.addMouseMotionListener(new MouseMotionListener(){
public void mouseDragged(MouseEvent e) {
resetCursorPos(e);
}
public void mouseMoved(MouseEvent e) {
resetCursorPos(e);
}
private void resetCursorPos(MouseEvent e){
int curX = e.getX()+frame.getX();
int curY = e.getY()+frame.getY();

int frameLeft = frame.getX()+20;
int frameRight = frame.getX()+frame.getWidth()-20;
int frameUp = frame.getY()+20;
int frameDown = frame.getY()+frame.getHeight()-20;

int x = curX;
int y = curY;

if(curX<frameLeft){
x = frameLeft;
}
if(curX>frameRight){
x = frameRight;
}
if(curY<frameUp){
y = frameUp;
}
if(curY>frameDown){
y = frameDown;
}
if(x!=curX || y!=curY)
robot.mouseMove(x, y);
}
});
}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧