Maus fangen

Status
Nicht offen für weitere Antworten.

Felix

Bekanntes Mitglied
Hallo zusammen,

wie kann ich denn die Maus einfangen?
Nennt man das überhaupt so? Was ich machen möchte ist (wie von Spielen bekannt), dass der Mauszeiger nicht mehr angezeigt wird, sondern man mit der Maus die Bewegung steuert. Allerdings möchte ich das Programm nicht im Vollbildmodus laufen lassen. Wie mache ich so etwas?

Grüße
der Felix
 
Sowas?

Code:
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.AWTEventListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JFrame;


public class MouseCatcher extends JFrame
{
	private Point lastPosition = new Point(0,0);
	private Robot r;
	
	public MouseCatcher() throws AWTException
	{
		r = new Robot();
		addMouseListener(new MouseAdapter()
		{
			@Override
			public void mouseExited(MouseEvent e)
			{
				super.mouseExited(e);
				r.mouseMove(lastPosition.x,lastPosition.y);
			}
		});
		addMouseMotionListener(new MouseMotionAdapter()
		{
			@Override
			public void mouseMoved(MouseEvent e)
			{
				super.mouseMoved(e);
				lastPosition = e.getLocationOnScreen();
			}
		});
		setPreferredSize(new Dimension(100,100));
		pack();
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		try
		{
			new MouseCatcher();
		}
		catch (AWTException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
 
Ich tippe mal, daß er in etwa sowas gemeint hat:

Code:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;

import javax.swing.*;

public class MouseCatcher extends JPanel implements MouseMotionListener {



	private static final long	serialVersionUID	= 1L;
	private Point p;

	public static void main(String[] args) {
		new MouseCatcher();
	}
	
	public MouseCatcher() {
		JFrame frame = new JFrame("demo");
    frame.setLocation(100,100);
	  frame.setSize(300,300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		addMouseMotionListener(this);

		BufferedImage img = new BufferedImage( 1, 1, BufferedImage.TRANSLUCENT );
		Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor( img, new Point(0,0), "wech" );
		setCursor(cursor);
		
		frame.add(this);
		
		frame.setVisible(true);
	}

	
	public void paintComponent(Graphics g) {
	  super.paintComponent(g);
		g.setColor(Color.RED);
		if(p!=null){
			g.drawRect(p.x, p.y, 20, 20);
		}
	
	}


	public void mouseDragged(MouseEvent e) {

		
	}

	public void mouseMoved(MouseEvent e) {

		p = e.getPoint();
		repaint();
		
	}




}
 
Mit der java.awt.Robot Klasse kannst du die Maus auch an eine neue Position (z.B. Mitte des Bildschirms) setzen. Sonst kannst du dich im Spiel irgendwann nicht mehr weiterbewegen weil die Maus am Rande des Bildschirmes angekommen ist.
 
Danke an alle schon mal, und ganz besonders für den Code. Ich versteh ihn auch, aber trotzdem wird, wenn ich ihn in Eclipse kopiere nur ein graues Fenster beim Ausführen geöffnet, und der Mauszeiger bleib erhalten. Und bei deinem Code Quaxli wird auch kein Rechteck gezeichnet... Konfigurationsfehler? Ich nehme an bei euch funktioniert der Code?
 
Nee, wir posten immer fehlerhaften Code 😉
Hast Du den Mauszeiger mal IN das aktive Fenster bewegt?
 
Ja das dachte ich mir :wink: Ne mal ernsthaft: wenn ich das Programm aus Eclipse raus starte funktionierts nicht, nur wenn ich es mit der Konsole aufmache.

Ja fett, damit ist meine Frage eigl gelöst, oder? Ich mach das so wie im Code oben und verschieb dann immer mit der Robot-Klasse den Mauszeiger wieder in die Mitte vom Fenster. :toll:
 
Felix hat gesagt.:
Ja das dachte ich mir :wink: Ne mal ernsthaft: wenn ich das Programm aus Eclipse raus starte funktionierts nicht, nur wenn ich es mit der Konsole aufmache.

Ja fett, damit ist meine Frage eigl gelöst, oder? Ich mach das so wie im Code oben und verschieb dann immer mit der Robot-Klasse den Mauszeiger wieder in die Mitte vom Fenster. :toll:

Das mit dem in die Mitte des Fensters verschieben würd ich mir nochmal überlegen...da springt die Maus ganz schön.
Wie schon oben, würd ich's lieber an den letzten Punkt vor dem Verlassen oder zumindest dort in die Nähe.
 
Ariol hat gesagt.:
Das mit dem in die Mitte des Fensters verschieben würd ich mir nochmal überlegen...da springt die Maus ganz schön.
Wie schon oben, würd ich's lieber an den letzten Punkt vor dem Verlassen oder zumindest dort in die Nähe.
Ist doch egal, sie ist ja unsichtbar :lol:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben