Maus festpinnen

Orbit

Erfahrenes Mitglied
Hallo,
Hab nen button, der Bewegnungen über mouseDragged registrieren soll.
Hierbei soll der Mauszeiger nicht bewegt werden.
Also setze ich ihn über einen Robot immer zurück auf den Stand, wo er zuerst gedrückt wurde....

Problem: die Abtastrate des AWT Threads scheint zu niedrig zu sein. Jedenfalls bewegt sich der Mausazeiger immer nen Stück (viel zu viel) und rutscht dann zurück auf den Button.
Wie krieg ich das hin, dass der Zeiger wirklich fest ist aber trotzdem ein mouseDragged stattfindet?
mfg,
Orbit
 
Gute Frage! Mit fällt spontan keine Möglichkeit ein um dies zu realisieren. Eventuell vom Betriebssystem die Schnittstelle blockieren lassen. Um die Tastatur zu blockieren gibt es doch einen Befehl, eventuell gibt es einen ähnlichen für die Maus. Ich bleib am Ball, eventuell hat jemand anderes eine Idee.Keine Sorge Orbit heute ist Sa und es ist spät. Bis spätestens Di ist deine Frage beantwortet.

(wer weiß wo sich die JavaEngel rum treiben?)
 
Zuletzt bearbeitet:
Hallo,

also bei mir bleibt der Cursor mit diesem Code an Ort und Stelle.
Java:
/**
 * 
 */
package de.tutorials;

import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

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

/**
 * @author Thomas.Darimont
 * 
 */
public class ClipMouseExample extends JFrame {

    JButton button;
    Robot robot;

    public ClipMouseExample() {
        super("ClipMouseExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        try {
            this.robot = new Robot();
            // robot.setAutoDelay(0);
        } catch (AWTException e) {
            e.printStackTrace();
        }

        this.button = new JButton("xxxxxxx");

        this.button.addMouseMotionListener(new MouseMotionAdapter() {

            Point point;

            public void mouseDragged(MouseEvent e) {
                if (point == null) {
                    point = e.getLocationOnScreen();
                }
                robot.mouseMove(point.x, point.y);
            }

            @Override
            public void mouseMoved(MouseEvent e) {
                point = null;
            }

        });

        add(button);
        setPreferredSize(new Dimension(320, 240));
        setLocationRelativeTo(null);
        pack();
        setVisible(true);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ClipMouseExample();
            }
        });
    }

}

Gruß Tom
 
Hallo,
Danke für eure Antworten!
Bei mir funktioniert Folgendes nicht:
HTML:
 point = e.getLocationOnScreen();
Ich bin den Umweg über MouseInfo gegangen, hab ansonsten aber den selben Ansatz:
Java:
		scr.addMouseMotionListener(new MouseMotionListener(){
			Point p;
			public void mouseMoved(MouseEvent e){
				p = null;
			}
			public void mouseDragged(MouseEvent e){
				if(p == null){
					p = MouseInfo.getPointerInfo().getLocation();
				}
                                ...
				try{
					Robot r = new Robot();
					r.mouseMove(p.x, p.y);
				} catch (AWTException exc){
				...

Liegt das bei dir am Thread? //EDIT: ne, liegts nicht...
oder ist die Klasse MouseInfo Schuld?
mfg,
Orbit
 
Zuletzt bearbeitet:
Hallo,

warum erzeugst du jedesmal einen neuen Robot?! ... Versuchs doch mal den Robot einmal zu erzeugen und dann wieder zu verwenden.

Gruß Tom
 
@ Orbit: Der Code von Tom funktioniert, ist es das was du wolltest? Der Messzeiger bewegt sich nur ein wenig.

@ Thomas Darimont: Wie du sicherlich weißt ist der nächste Post dein 8.000! Weiter so.
 
Hmm auch mit einem Robot für alles funktionierts nicht.. die Maus bewegt sich ziemlich weit bei mir.
Meine Mauseinstellungen sind sehr schnell.. vil liegts nur daran.
Der Messzeiger bewegt sich nur ein wenig.
Wieviel?

@Tom:
welche Javaversion hast du?
Weder bei 6.0 noch bei früheren Versionen gibts bei mir die Funktion
Code:
MouseEvent.getLocationOnScreen();

Aber über MouseInfo müsste das das selbe sein oder?
 
Ich habe dir das als Jar-Datei gepackt um es auszuprobieren, sag bescheid wie dir das Ergebnis gefällt!

Ich glaube noch nicht mal das sich die Maus bewegt, sie verwischt oder zappelt nur Ein wenig!
 

Anhänge

  • ClipMouseExample.jar
    2,5 KB · Aufrufe: 18
Hallo


package java.awt.event;

* @author Carl Quinn
* 1.56, 07/11/06
*
* @see MouseAdapter
* @see MouseListener
* @see MouseMotionAdapter
* @see MouseMotionListener
* @see MouseWheelListener
* @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/mouselistener.html">Tutorial: Writing a Mouse Listener</a>
* @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/mousemotionlistener.html">Tutorial: Writing a Mouse Motion Listener</a>
*
* @since 1.1
*/
public class MouseEvent extends InputEvent {
*
* @see java.awt.GraphicsConfiguration
* @since 1.6
*/
public Point getLocationOnScreen(){

Gruß Tom
 
Zurück