初学java Swing,做了一个程序想把鼠标限制在某个窗体内,但不知道具体怎么实施,请高手指教!

解决方案 »

  1.   

    我写了一段不是很完美的代码,参考一下吧^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);
    }
    });
    }
    }