Mausbewegung sehen und simulieren

Status
Nicht offen für weitere Antworten.
L

LeXor

Gast
Hallo,

wie man eine Maus bewegt, weißt doch jeder robot.mouseMove( x, y ); damit wird eine Maus aber nicht bewegt, sondern diese Springt dorthin.

Gibt es nicht eine Funktion die die Bewegung von A nach B simuliert, d.h. das ich die Bewegung sehe???
 

Marco13

Top Contributor
Ja. Das Problem ist nur, dass man nicht immer weiß, WO man am ANFANG der Bewegung ist. Da muß man ein bißchen tricksen...

Die Bewegung an sich sollte evtl. in einem eigenen Thread laufen. Ist nur schnell hingehackt. Wollte nur sehen, obs geht :D
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class SmoothMoverTest extends JFrame
{
    public static void main(String args[])
    {
        new SmoothMoverTest();
    }

    public SmoothMoverTest()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(0,0,200,400);


        getContentPane().setLayout(new GridLayout(3,1));


        final SmoothMover sm = new SmoothMover(this);


        JButton b0 = new JButton("move0");
        b0.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
				sm.mouseMove(500,500,600);
            }
        });
        getContentPane().add(b0);

        JButton b1 = new JButton("move1");
        b1.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
				sm.mouseMove(800,100,100);
            }
        });
        getContentPane().add(b1);

        JButton b2 = new JButton("suicide");
        b2.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
				int x = getBounds().x + getBounds().width - 12;
				int y = getBounds().y + 12;
				sm.mouseMove(x,y,600);
				sm.getRobot().mousePress(InputEvent.BUTTON1_MASK);
				sm.getRobot().mouseRelease(InputEvent.BUTTON1_MASK);

            }
        });
        getContentPane().add(b2);

        setVisible(true);

    }

}



class SmoothMover implements MouseMotionListener, MouseListener
{
    private Robot robot;
    private int currentX;
    private int currentY;
	private JFrame owner;

    public SmoothMover(JFrame frame)
    {
		owner = frame;
		owner.getGlassPane().addMouseMotionListener(this);
		owner.getGlassPane().addMouseListener(this);
		owner.getGlassPane().setVisible(true);

        try
        {
            robot = new Robot();
        }
        catch (Exception e)
        {
            System.out.println("Uh-oh...");
            e.printStackTrace();
        }
    }

	public Robot getRobot()
	{
		return robot;
	}

    public void mouseMove(int destX, int destY, int duration)
    {
		int dx = destX - currentX;
		int dy = destY - currentY;
		int x = currentX;
		int y = currentY;

		int steps = 100;
		int sleepTime = duration / steps;
		for (int i=0; i<=steps; i++)
		{
			float a = (float)i/steps;
			x = currentX + (int)(a * dx);
			y = currentY + (int)(a * dy);
			robot.mouseMove(x,y);
			robot.delay(sleepTime);
		}
		currentX = x;
		currentY = y;
	}

    public void mouseMoved(MouseEvent e)
    {
		Point p = new Point(e.getPoint());
		SwingUtilities.convertPointToScreen(p, owner.getGlassPane());
        this.currentX = p.x;
        this.currentY = p.y;
        redispatchMouseEvent(e);
    }
    public void mouseDragged(MouseEvent e)
    {
		Point p = new Point(e.getPoint());
		SwingUtilities.convertPointToScreen(p, owner.getGlassPane());
        this.currentX = p.x;
        this.currentY = p.y;
        redispatchMouseEvent(e);
    }
    public void mouseEntered(MouseEvent e)
    {
        redispatchMouseEvent(e);
    }
    public void mouseExited(MouseEvent e)
    {
        redispatchMouseEvent(e);
    }
    public void mousePressed(MouseEvent e)
    {
        redispatchMouseEvent(e);
    }
    public void mouseReleased(MouseEvent e)
    {
        redispatchMouseEvent(e);
    }
    public void mouseClicked(MouseEvent e)
    {
        redispatchMouseEvent(e);
    }

    private void redispatchMouseEvent(MouseEvent e)
    {
        Point glassPanePoint = e.getPoint();
        Container container = owner.getContentPane();
        Component glassPane = owner.getGlassPane();
        Point containerPoint = SwingUtilities.convertPoint(glassPane, glassPanePoint, container);

		if (containerPoint.y >= 0)
		{
			Component component =
				SwingUtilities.getDeepestComponentAt(
										container,
										containerPoint.x,
										containerPoint.y);

			if (component != null) {
				Point componentPoint = SwingUtilities.convertPoint(
											glassPane,
											glassPanePoint,
											component);
				component.dispatchEvent(new MouseEvent(component,
													 e.getID(),
													 e.getWhen(),
													 e.getModifiers(),
													 componentPoint.x,
													 componentPoint.y,
													 e.getClickCount(),
													 e.isPopupTrigger()));
			}
		}
    }

}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Mausbewegung auslesen Java Basics - Anfänger-Themen 6
J Bild per MausKlick und Mausbewegung Scrollen Java Basics - Anfänger-Themen 11
H Vier Augen sehen mehr... Java Basics - Anfänger-Themen 6
B .bat - Datei starten ohne Konsolenfenster zu sehen Java Basics - Anfänger-Themen 6
L JPanel vergrößern bis JScrollPane nicht mehr zu sehen Java Basics - Anfänger-Themen 7
I Programmdurchläufe Schritt für Schritt sehen. Java Basics - Anfänger-Themen 5
G GUI nicht in Taskleiste zu sehen. Java Basics - Anfänger-Themen 8
P Label nicht bei Progressbar zu sehen Java Basics - Anfänger-Themen 8
S Programmierung simulieren - aber wie?! Java Basics - Anfänger-Themen 3
T Tastatur mit robot ß ^ und @ simulieren Java Basics - Anfänger-Themen 4
N Tastatur simulieren Java Basics - Anfänger-Themen 4
T Tastendruck simulieren Java Basics - Anfänger-Themen 13
L Enter simulieren Java Basics - Anfänger-Themen 10
T Tastendruck simulieren in JPanel Java Basics - Anfänger-Themen 3
R EOF simulieren Java Basics - Anfänger-Themen 2
A dynamisches Array simulieren Java Basics - Anfänger-Themen 8
I USB-Gerät simulieren Java Basics - Anfänger-Themen 4
H Tastendruck simulieren | SendKeys Java Basics - Anfänger-Themen 12
S ANT - for Schleife simulieren? Java Basics - Anfänger-Themen 1
M Prüfung simulieren Java Basics - Anfänger-Themen 4
J Klick der ein Javascript ausfuehrt simulieren? Java Basics - Anfänger-Themen 2
B Mäusepopulation durch Threads simulieren. Java Basics - Anfänger-Themen 2
S Regelkreis simulieren Java Basics - Anfänger-Themen 4
L JEditorpane Mausklick simulieren Java Basics - Anfänger-Themen 6
R Mausklick simulieren Java Basics - Anfänger-Themen 5
D ActionEvent simulieren ? Java Basics - Anfänger-Themen 7
G Maus+Tastatur aktionen simulieren? Java Basics - Anfänger-Themen 5
B Tasteneingaben simulieren? Java Basics - Anfänger-Themen 3
T Kann man in einer Anwendung Eingaben simulieren? Java Basics - Anfänger-Themen 8
F Wie kann ich das Drücken der Tabulatortaste simulieren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben