Maus zittern lassen

programer85

Mitglied
Hallo Leute!
Ich habe es jetzt endlich verstanden!
Ich weiß jetzt wie man einen Robot erstellt!
Jetzt wo ich weiß wie man einen Robot erstellt fehlt mir nur noch die Ide...
Die Idee, wie man die Maus mit Hilfe des Robots zum Zittern bringen lässt, also dass sie nie still steht...
Wenn einer eine Idee hat, könnte er bitte auch ein Beispiel posten?
thx
 
Ich würde Randomzahlen in einem Bereich von 0 bis x generieren und von der Originalposition der Maus dann drauf addieren / Subtrahieren.
 
Danke !
Habe es mal ausprobiert!
Die Maus zittert zwar!
Man kann sie aber niocht mehr von der Stelle bewegen!
Hier der Code:
Code:
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.*;
import java.awt.event.MouseMotionAdapter;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JFrame;

/**
 * @author programer85@tutorials.de
 *
 */
public class Zittern extends JFrame {


    int mousex;
    int mousey;
    int xmax;
    int xmin;
    int ymax;
    int ymin;
    int index;
    int index2;
    Random zufallsgenerator = new Random();
    Robot robot;
    public Zittern() {
        super("Mein Mauszitterer");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        try {
            this.robot = new Robot();
            // robot.setAutoDelay(0);
        } catch (AWTException e) {
            e.printStackTrace();
        }
        this.addMouseMotionListener(new MouseAdapter(){
           public void mouseMoved(MouseEvent e){
                mousex = e.getX();
                mousey = e.getY();
                xmax = mousex + 20;
                xmin = mousex - 20;
                ymax = mousey + 20;
                ymin = mousey - 20;
                while(true){
                index = zufallsgenerator.nextInt(xmax)+xmin;
                index2 = zufallsgenerator.nextInt(ymax)+ymin;
                robot.mouseMove(index,index2);
                }

           }
        });


        


        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 Zittern();

            }
        });
    }


}
Ich weiß glaubich auch warum!
Nämlich weil ich 'while(true)' geschrieben hab!
Aber was gäbe es für eine bessere Möglichkeit?
 
Zuletzt bearbeitet:
Hmm gute Frage...

Mach nen Thread draus und mach immer mal nen sleep. Frag außerdem ab ob sich die Maus zwischenzeitlich bewegt hat und dann ist dass die neue Originalposition.
 
Java:
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;

import javax.swing.JFrame;


public class Zittermaus extends JFrame {
	public static void main(String[] args) {
		new Zittermaus();
	}
	
	private int iWidth = 400, iHeight = 3*iWidth/4;
	Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	MouseEvent mEvent = null;
	
	
	private Zittermaus() {
		super("Zittermaus");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setBounds((d.width-iWidth)/2, (d.height-iHeight)/2, iWidth, iHeight);
		
		addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent ke) {
				System.exit(0);
			}
		});
		
		addMouseMotionListener(new MouseAdapter() {
			public void mouseMoved(MouseEvent me) {
				mEvent = me;				
			}
		});
		
		addMouseListener(new MouseAdapter() {
			public void mouseExited(MouseEvent me) {
				mEvent = null;
			}
		});
		setResizable(false);
		setVisible(true);
		
		startZitterThread();
	}
	
	private void startZitterThread() {
		new Thread(new Runnable() {
			public void run() {
				try {
					Robot rob = new Robot();
					Random rnd = new Random();
					int iSprungweite = 10; //maximale Sprungweite der Originalposition
					
					while(true) {
						if(mEvent != null) {
							int newX = mEvent.getXOnScreen() - iSprungweite + rnd.nextInt(iSprungweite*2+1);
							int newY = mEvent.getYOnScreen() - iSprungweite + rnd.nextInt(iSprungweite*2+1);
							rob.mouseMove(newX, newY);
						}
						Thread.sleep(10);
					}
				} catch(Exception e) {
					System.out.println(e.getMessage());
				}
			}
		}).start();;
	}
}

mit diesem Programm spring die Maus nur innerhalb des JFrames herum. Wenn du möchtest, dass die Maus beim Verlassen des JFrames wieder ins Fenster Springt, dann musst du den folgenden Code aus dem Programm entfernen oder ausklammern:
Java:
addMouseListener(new MouseAdapter() {
	public void mouseExited(MouseEvent me) {
		mEvent = null;
	}
});

wenn du noch Fragen zu irgendwelchen Programmabschnitten hast oder vllt möchtest, dass das Programm an einer stelle (z.B. wenn die Maus das JFrame verlässt) anderst reagiert, dann schieß los. :)
 
Zuletzt bearbeitet:
Zurück