Swing Maus Rastersprung

Status
Nicht offen für weitere Antworten.

washpuda

Mitglied
Hallo Leute :D,


ich möchte mal so ne art CAD Programm schreiben, da ich diese für eine Problemlösung benötige.

Schwierigkeiten macht mir momentan der Mauszeiger, der soll bei aktivem Raster nur die Rasterpunkte anspringen. Es gibt zwar die Möglichkeit mir Robot MausMove die Position des Mauszeigers anzupassen, was irgendwie nicht sehr Ideal ist.


Beispiel Raster 10 Pixel. Wenn Zeiger auf Rasterpunkt und ich die Maus um 1 Pixel verschiebe wird bevor die Mausmotionmethode aufgerufen wird der Mauszeiger bereits verschoben (soll nicht sein, weil). In der Methode selbst berechne ich zwei Mauspositionen, eine wo sich der Zeiger tatsächlich befindet und eine dynamische wo sich der Zeiter ohne Rastersprung befinden würde. In der Methode wird über das Robotobjekt der Zeiger auf den nächsten Rasterpunkt gesetzt (es wird automatisch nochmal die Mausmotionmethode aufgerufen die ich jetzt über eine Flag überspringe);

Wenn allein der Rastersprung berechnet in der Mausroutine aktiviert ist sieht es sehr gut aus, da das zurückspringen auf den nächsten Rasterpunkt sehr schnell geht. Aber um so voller die Methode wird, um so störender wird das hin und herspringen des Mauszeigers.


Gibt es die Möglichkeit in Java den Mauszeiger zu entkoppeln, so das bei Mausbewegung lediglich die Mousemotionmethode aufgerufen wird, der Zeiger jedoch nur von Hand gesetzt wird.

Wie sieht es aus, wenn ich den Mauszeiger ausblende, und meine eigenen Mauszeiger über die PaintMethode male. Hat hier jemand erfahrung.


private void RasterFang(MouseEvent e) {

Java:
  try {
       Robot robot = new Robot();
	int dX = 0, dY = 0;
	dX = e.getX() - this.bProp.aktXMausPos;
	dY = e.getY() - this.bProp.aktYMausPos;
	Point scrLocation = this.builderPanel.getLocationOnScreen();

	this.bProp.aktXMausPos = e.getX();
            this.bProp.aktYMausPos = e.getY();

	if (this.robotMove) {
	this.bProp.virtXMausPos += dX;
	this.bProp.virtYMausPos += dY;

	int dXStep = this.bProp.virtXMausPos % this.bProp.xRasterStep;
	int dYStep = this.bProp.virtYMausPos % this.bProp.yRasterStep;

	if (dXStep >= this.bProp.xRasterStep / 2) {
		dXStep = this.bProp.xRasterStep - dXStep;
		} else {
		dXStep = -dXStep;}

	if (dYStep >= this.bProp.yRasterStep / 2) {
	dYStep = this.bProp.yRasterStep - dYStep;
	} else {
	dYStep = -dYStep;}
	e.translatePoint(10, 10);
	robot.mouseMove(scrLocation.x + this.bProp.virtXMausPos
		+ dXStep, scrLocation.y + this.bProp.virtYMausPos
		+ dYStep);
		robotMove = false;} else {robotMove = true;} /
		} catch (AWTException e1) {

			e1.printStackTrace();
		}

	}
 

Schandro

Top Contributor
sehr unwahrscheinlich das du das bewegen des Mauszeigers verhindern kannst, ich wüsste keine Methode außer eben das nachträgliche zurücksetzen über die Robot#mouseMove Methode.

Wie sieht es aus, wenn ich den Mauszeiger ausblende, und meine eigenen Mauszeiger über die PaintMethode male. Hat hier jemand erfahrung.
Sobald der echte unsichtbare Mauszeiger am Rand des Bildschirms angekommen ist, werden keine MouseMotion-Events mehr gesendet. Deswegen müsstest du den echten unsichtbaren Mauszeiger immer z.b. in der Mitte des Bildschirms halten (über Robot#mouseMove). Ansonsten würde das funktionieren, musst halt nur drauf achten das es nicht zu Benutzerunfreundlich wird.
 

washpuda

Mitglied
Ich habe gerade mal versucht den Mauszeiger über die Paintmethode zu zeichnen.

In der MouseMotionroutine rufe ich jeweils

Java:
this.builderPanel.repaint(new Rectangle(e.getX()-8,e.getY()-8,16,16));

für die neue MauszeigerPosition auf und für die alte. Denn Mauscursor selbst blende ich aus, indem ich über den Cusomcursor einen leeren transparenten Cursour übergebe.

Um zu testen ob dies auch bei voller Paintmethode flüssig läuft, zeichne ich einfach 1000 Linien. Es Funktioniert sehr gut keine verzögerung feststellbar.

Wenn die Zeichenfläche verlassen wird, wird automatisch der Mauszeiger wiederhergestellt, da ja nur der leere Mauszeiger für das Panel gilt in dem ich Zeichne.

Beim Verlassen des Zeichenpanels bleibt jedoch noch der selbstgezeichnete Cursor stehen, was sich sicherlich noch über die exited-Methode beseitigen läst.
 

Marco13

Top Contributor
Ein bißchen subjektiver Senf: Ich halte es für HÖCHST fragwürdig, den Mauszeiger mit einem Robot zu bewegen. Dafür ist ein Robot nicht da! Ich würde eher (bzw. habe in meinem "CAD"-Programm schon) ein Kreuzchen an der gesnappten Position malen - ggf. kann man dann auch den echten Mauszeiger ausblenden... So ähnlich hast du das jetzt auch (vor)?!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Linie mit der Maus auswählen AWT, Swing, JavaFX & SWT 5
B mit maus Objekt bewegen AWT, Swing, JavaFX & SWT 3
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
T Timer und GIF Animationen pausieren während Maus sich bewegt AWT, Swing, JavaFX & SWT 4
M Bild in JPanel mit Maus einfügen AWT, Swing, JavaFX & SWT 0
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
L 2D-Grafik Bild in Richtung Maus drehen AWT, Swing, JavaFX & SWT 18
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
A JFrame Größenänderung mit Maus und GridLayout AWT, Swing, JavaFX & SWT 10
J Maus "locken" für Menü AWT, Swing, JavaFX & SWT 8
D Grafiken an Maus anhängen AWT, Swing, JavaFX & SWT 2
P Pfeilpolygon per Maus rotierbar machen - Kleine Schwierigkeiten AWT, Swing, JavaFX & SWT 29
P Event Handling Gedrückte Maus Blockiert MausEvents AWT, Swing, JavaFX & SWT 2
R Swing Per Maus JLabel resizen AWT, Swing, JavaFX & SWT 6
F Maus von alleine bewegen! AWT, Swing, JavaFX & SWT 8
G Swing JPanel per Maus verschieben AWT, Swing, JavaFX & SWT 5
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
C AWT Mausbarriere Maus fangen AWT, Swing, JavaFX & SWT 10
J "Auswahlfenster" mit Maus auf JLabel zeichnen AWT, Swing, JavaFX & SWT 4
W Swing Bild zeichnen wenn Maus an bestimmter Position ist AWT, Swing, JavaFX & SWT 4
J Inaktivität von Maus und Tastatur AWT, Swing, JavaFX & SWT 4
G AWT Images aus Imagearray an die Maus pappen und bewegen AWT, Swing, JavaFX & SWT 4
F Element anzeigen / erstellen. Maus vs Controller AWT, Swing, JavaFX & SWT 7
M 3D-Grafik Bewegung mit der Maus ohne Klicken AWT, Swing, JavaFX & SWT 10
F Swing Objekte mit Maus verschieben AWT, Swing, JavaFX & SWT 8
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
Y AWT Maus Koordinaten abspeichern in eine Textfile AWT, Swing, JavaFX & SWT 3
Weltall 7 AWT Maus-Events werden doppelt ausgeführt AWT, Swing, JavaFX & SWT 12
C permanente aktualisierung der Koordinaten der Maus auf einem Panel AWT, Swing, JavaFX & SWT 8
J maus festlegen AWT, Swing, JavaFX & SWT 6
C paintComponent mit Maus verschieben - wie? AWT, Swing, JavaFX & SWT 2
T Swing JComboBox: Listeneinträge mit der Maus verschieben AWT, Swing, JavaFX & SWT 5
O JSlider - wie unterscheide ich mit Maus verändert und durch setValue verändert. AWT, Swing, JavaFX & SWT 16
S Swing JTable Auswahl mehrerer Zellen mit STRG+Maus AWT, Swing, JavaFX & SWT 3
E Hilfetext anzeigen beim Überfahren mit der Maus AWT, Swing, JavaFX & SWT 3
G Maus über Button AWT, Swing, JavaFX & SWT 3
S Funktion nur ausführen, wenn Maus über Componente ist AWT, Swing, JavaFX & SWT 2
G Listenelemente mit der Maus verschieben AWT, Swing, JavaFX & SWT 4
B kein MouseEvent bei zu schneller Bewegung der Maus AWT, Swing, JavaFX & SWT 7
B JTable - Wechsel der Spalte bei TAB, RETURN oder Maus AWT, Swing, JavaFX & SWT 5
D Mit der Maus in verschiedene Modi wechseln AWT, Swing, JavaFX & SWT 15
Z Buttons erscheinen erst wenn man mit der Maus drüber geht AWT, Swing, JavaFX & SWT 7
G Elemente erst da wenn mit Maus drüber gefahren bin AWT, Swing, JavaFX & SWT 2
M Kreis mit gedrückter Maus bewegen AWT, Swing, JavaFX & SWT 20
F Größenänderung mittels Maus - selbst implementieren? AWT, Swing, JavaFX & SWT 3
R Einstellen der Maus Rad Geschwindigkeit beim Scrollen AWT, Swing, JavaFX & SWT 3
G Kreis zeichnen und mit Maus ziehen AWT, Swing, JavaFX & SWT 3
W Maus Rahmen zeichnen AWT, Swing, JavaFX & SWT 10
A JFileChooser - Mehrere Dateien per Maus markieren (nokeys) AWT, Swing, JavaFX & SWT 7
V JTable Handling Fokus on Keystroke und Maus Doubleclick AWT, Swing, JavaFX & SWT 9
R JTable: Maus-Click ohne Datensätze AWT, Swing, JavaFX & SWT 9
L Größe von Komponenten im Nulllayout mit der Maus verändern. AWT, Swing, JavaFX & SWT 2
J Context Menü Maus AWT, Swing, JavaFX & SWT 3
G JTable selektion der Zeile bei Fokusieren mit der Maus AWT, Swing, JavaFX & SWT 5
T mousemoved abfrage - aber welches event wenn maus weg? AWT, Swing, JavaFX & SWT 2
lin Frame bei Drücken eines Buttons mit Maus verschieben AWT, Swing, JavaFX & SWT 7
G [AWT] Zeichnungen per Maus auswählen AWT, Swing, JavaFX & SWT 8
D Ne Maus Event Frage AWT, Swing, JavaFX & SWT 4
D Polygon mit der Maus zeichnen AWT, Swing, JavaFX & SWT 2
M Zusätzlichen Maus-Klick erzeugen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben