Contents / Previous / Next


Center Mouse Cursor (by Stefan Rudnitzki)

Use awt.Robot to the center the mouse cursor.
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


// The Robot generates a mouese move
// event that keeps the cusor in the middle
// of the window after mouseExited.
// Then processing mouse events one has to 
// distingush between these kind of mouse events
// and mouse events generated by the user.
// Thers is a Flag in the the event class for that. 
public class CenterMouseCursor {
  static boolean enabled = false;

  public static void main(String[] args){
    final JFrame frame = new JFrame();
    frame.setSize(320, 240);
    frame.getContentPane().setLayout(new BorderLayout());
    JButton button = new JButton("switch");
    button.addActionListener(new ActionListener(){
	public void actionPerformed(ActionEvent arg0) {
	  if(enabled){
	    enabled = false;
	    frame.getRootPane().setCursor(null);
	  }
	  else{
	    enabled = true;
	    frame.getRootPane().setCursor(null);
	  }
	}
      });
    frame.getContentPane().add(button, BorderLayout.SOUTH);
    frame.addMouseListener(new MouseAdapter(){
	public void mouseExited(MouseEvent arg0) {
	  if(enabled && frame.isShowing()){
	    Point locOnScreen = frame.getLocationOnScreen();
	    int middleX = locOnScreen.x + (frame.getWidth() / 2);
	    int middleY = locOnScreen.y + (frame.getHeight() / 2);
	    try{
	      Robot rob = new Robot();
	      rob.mouseMove(middleX, middleY);
	    }catch(Exception e){System.out.println(e);}
	    //setting mouse coords
	  }
	  System.out.println(arg0.getSource());
	};
      });
    frame.show();
  }
}