Koordinaten des Mouselistener nicht überall gleich

Letavino

Aktives Mitglied
Hallo,
ich schreibe gerade eine grafische Anwendung, die mit dem Mouselistener arbeitet.
Dieser soll herausfinden, wohin der User geklickt hat.
Nun musste ich allerdings feststellen, dass die Koordinaten, die er lädt nicht auf allen Rechnern identisch sind.
Ich frage die Koordinaten mit
Java:
x = e.getX()
und
Java:
y = e.getY()
ab.

Auf diesem Rechner sind die Koordinaten immer die gleichen, klickt man den gleichen Punkt an.
Auf dem Schulrechner sind sie um ein paar Pixel verschoben.
Wie kommt das zustande? Evtl. wegen veralteter Java Version?
Und wie kann man diesen Effekt abfangen?

Dieser Computer: Windows Vista SP2, Java Updates immer installiert
Schulcomputer: Windows XP Prof., Computer wird immer auf Installationsstand zurückgesetzt, daher wohl ziemlich veraltete Java Version

Das Problem ist einfach, dass ein tadellos funktionierendes Programm dort nicht korrekt arbeitet, wobei Plattformunabhängigkeit doch eigentlich die Stärke von Java sein sollte.

(Ebenfalls getestet mit aktuellem und leistungsstarkem Windows 7 Prof. PC, da funktioniert auch alles korrekt.)

Mit freundlichem Gruß,
Letavino
 
S

SlaterB

Gast
ziemlich ungenau beschrieben, was heißt denn konkret 'ein paar Pixel'?
geht es nur um eine bestimmte Dimension, x oder y?
sind die Pixel dennoch korrekt, wenn etwa mit paintComponent genau an der Stelle etwas gezeichnet wird?

Abweichungen können sich vielleicht schon durch unterschiedliche Bildschirmauflösungen, andere Darstellung von Rändern/ Headern ergeben, die alles bisschen verschieben,
ist die Übereinstimmung hier wichtig?
 

Letavino

Aktives Mitglied
ziemlich ungenau beschrieben, was heißt denn konkret 'ein paar Pixel'?
geht es nur um eine bestimmte Dimension, x oder y?

Ich kann es leider nur grob bestimmen, da ich an den Schulcomputer im Moment nicht dran komme.
Wir haben in der paintComponent Methode mit drawImage ein Bild über das ganze Fenster zeichnen lassen und einen bestimmten Punkt angeklickt.
Hier sind die Koordinaten etwa (34|135), dort waren sie etwa (30|128).
(Ein wenig Abweichung ist möglich)

sind die Pixel dennoch korrekt, wenn etwa mit paintComponent genau an der Stelle etwas gezeichnet wird?

Beim Zeichnen verschiedener Komponenten ist auf beiden Computern kein Unterschied festzustellen.

Abweichungen können sich vielleicht schon durch unterschiedliche Bildschirmauflösungen, andere Darstellung von Rändern/ Headern ergeben, die alles bisschen verschieben,
ist die Übereinstimmung hier wichtig?

Die Übereinstimmung ist in sofern wichtig, als dass wir das Fenster, in dem das Programm läuft, in Felder mit 20px * 20px eingeteilt haben. Klickt man in eins dieser Felder, wird der obere linke Punkt des Feldes als Startpunkt einer Zeichnung verwendet.
Bei dieser Verschiebung kommt es allerdings vor, dass das falsche Feld verwendet wird, obwohl man in das richtige hineinklickt, was unerwünschte Folgen hat.

Gruß
 
S

SlaterB

Gast
> Bei dieser Verschiebung kommt es allerdings vor, dass das falsche Feld verwendet wird, obwohl man in das richtige hineinklickt, was unerwünschte Folgen hat.

das wäre dann ja schon eine Abweichung entgegen
> Beim Zeichnen verschiedener Komponenten ist auf beiden Computern kein Unterschied festzustellen.
wobei du vielleicht an die unterschiedlichen Computer gedacht hast,

ich meine ob in beiden funktioniert, einen Pixel anzuklicken, und mit diesen Komponenten einen Pixel in paintComponent zu färben,
oder einen kleinen Kreis zu machen, der dann genau richtig sitzt?

anhand der Felder scheint das nicht der Fall zu sein..,
kannst du bisschen zum Code posten, gar ein komplettes Programm? vielleicht habe ich zufällig auch einen 'nicht funktionierenden' Rechner ;) ,
oder ich kann etwas nach Layout-Besonderheiten, Insets usw. schauen
 
S

SlaterB

Gast
was wären denn dort die unterschiedlichen Parameter, source und destination?
wenn man verschiedene Panels hat, die mit Layout und Abstand ineinanderliegen, dann hätte man ja eine allgemeine Erklärung,
nicht aber unbedingt für unterschiedliches Verhalten auf verschiedenen Rechnern, wobei dies eher denkbar wäre
 

Letavino

Aktives Mitglied
> Bei dieser Verschiebung kommt es allerdings vor, dass das falsche Feld verwendet wird, obwohl man in das richtige hineinklickt, was unerwünschte Folgen hat.

das wäre dann ja schon eine Abweichung entgegen
> Beim Zeichnen verschiedener Komponenten ist auf beiden Computern kein Unterschied festzustellen.
wobei du vielleicht an die unterschiedlichen Computer gedacht hast,
Dann sag ich mal: Optisch ist kein Unterschied bei beiden Rechner feststellbar, aber das muss ja auch nichts heißen, wenn alle Pixel um den gleichen Wert verschoben sind.

ich meine ob in beiden funktioniert, einen Pixel anzuklicken, und mit diesen Komponenten einen Pixel in paintComponent zu färben,
oder einen kleinen Kreis zu machen, der dann genau richtig sitzt?

Ich würde es gerne testen, aber ich komme leider bis zur Präsentation des Projekts an keinen Schulcomputer mehr ran.

anhand der Felder scheint das nicht der Fall zu sein..,
kannst du bisschen zum Code posten, gar ein komplettes Programm? vielleicht habe ich zufällig auch einen 'nicht funktionierenden' Rechner ;) ,
oder ich kann etwas nach Layout-Besonderheiten, Insets usw. schauen

Das Programm ist mittlerweile auf 1000 bis 2000 Zeilen Code in verschiedenen Klassen angewachsen.
Dazu ist es noch vollkommen unkommentiert, da ich bisher der einzige war, der daran gearbeitet hat und ich auch so bisher noch den vollen Durchblick habe. Kommentare füge ich aber noch an.
Deswegen will ich ungern jemanden zumuten,sich dadurch zu kämpfen, nur um mir zu helfen.
Sooo gravierend ist der Fehler ja auch nicht. ;)

Ach ja, ich habe gerade gesehen, dass ich am Anfang zum testen folgenden Code verwendet habe, um den oberen linken Punkt eines Feldes richtig zu bestimmen und seither hab ich daran nicht geändert:

Java:
sourceX = e.getX()-10 - ((e.getX()-10) % 20);
sourceY = e.getY()-30 - ((e.getY()-30) % 20);

Schon da musste ich nachkorrigieren und hab es seitdem leider nicht mehr beachtet. Kann es damit zutun haben?
(Ich hoffe, es ist einigermaßen verständlich, sonst bitte nachfragen. ;) )

Gruß!
 
S

SlaterB

Gast
> Kann es damit zutun haben?

denkbar ist alles, zu den genannten 4/7 Pixel-Abweichung passt das nicht unbedingt,
kommt darauf was das im weiteren bewirkt,

also zusammenfasst: ja/nein/vielleicht ;)

um auf ganze 20er zu runden vielleicht geeigneter:
Java:
int n = 20;
sourceX = (e.getX()-10)/n*n;
sourceY = (e.getY()-30)/n*n;;
da int/int im positiven Bereich abgerundet wird

------

> Sooo gravierend ist der Fehler ja auch nicht.

wenn der Mausklick nicht das Feld darunter trifft, wäre das schon kritisch
 

Letavino

Aktives Mitglied
Vielen Dank für den Codevorschlag! :)

Den Abzug von 10 bzw. 30 musste ich vornehmen, da der 0 Punkt des Fensters dort zu liegen scheint.
Java:
drawImage(image, 0, 0, this);
zeichnet das Bild "image" aber korrekt in dieser Ecke.

Wo kommt diese Abweichung denn her? Wenn hier Ränder mit berücksichtigt werden, kann es sein, dass diese bei XP vielleicht eine leichte Abweichung gegenüber Vista / Windows 7 haben?
Ich suche mir mal einen XP Rechner und teste das mal.

Gruß!
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
> Wo kommt diese Abweichung denn her?

ohne dein konkretes Programm kann man das kaum klären,
wenn du einem JFrame einen MouseListener zuweist, rechnet der vielleicht von oben links vom Fenster aus, wo erstmal 20 Pixel Header-Balken erfolgen,
ein JPanel als ContentPane hat dagegen 0,0 genau da wo es auch zu malen beginnt, unterhalb des Headers,
logischerweise sollte auch der MouseListener auf diesem Panel registiert werden, dann müsste alles pixelgenau übereinstimmen,

wenn du also dahingehend etwas mit festen Zahlen korrigierst, sind Abweichungen auf verschiedenen Rechnern nicht verwunderlich,
- stelle das entweder ganz ab durch korrekten Listener,
- verwende die Methode von bygones, kenne ich nicht so genau,
- ober verwende zum Abzug konkrete Werte, z.B. liefert getInsets() auf das JFrame (evtl. erst NACH setVisible(true))

Code:
java.awt.Insets[top=23,left=4,bottom=4,right=4]
was 23 Pixel für den Header oben ausdrückt usw.
 

Marco13

Top Contributor
Häng' den MouseListener an die Component, in der mit
drawImage(image, 0, 0, this);
das Bild gezeichnet wird, dann stimmen die Koordinaten auch. Wenn der Listener an einer übergeordneten Component (im schlimmsten Fall dem Frame) hängt, kommt es zu den angesprochenen Problemen, weil die Titeleiste eben mal 23 und mal 31.9 Pixel hoch ist...
 

Letavino

Aktives Mitglied
Häng' den MouseListener an die Component, in der mit
drawImage(image, 0, 0, this);
das Bild gezeichnet wird, dann stimmen die Koordinaten auch. Wenn der Listener an einer übergeordneten Component (im schlimmsten Fall dem Frame) hängt, kommt es zu den angesprochenen Problemen, weil die Titeleiste eben mal 23 und mal 31.9 Pixel hoch ist...

Dann liege ich ja mit meiner letzten Vermutung genau richtig, denn ich habe den MouseListener an dem Frame hängen.
Also muss ich ihn an die paintComponent hängen?
Schickt dort einfach ein
Java:
this.addMouseListener(this);
in dieser Componente? Denn nur damit funktioniert es noch nicht.

Gruß!
 
S

SlaterB

Gast
wenn du einen Compilerfehler genauer benennen kannst ist es wahrscheinlich leicht zu korrigieren,
wenn aber niemand mehr auf die Maus reagiert, wirds schwieriger

ganz offensichtlich kann rein aus einer Codezeile mit bekannten Befehlen und Verweigerung jeglicher sonstiger Informationen nichts gelesen werden
 

Letavino

Aktives Mitglied
wenn du einen Compilerfehler genauer benennen kannst ist es wahrscheinlich leicht zu korrigieren,
wenn aber niemand mehr auf die Maus reagiert, wirds schwieriger

ganz offensichtlich kann rein aus einer Codezeile mit bekannten Befehlen und Verweigerung jeglicher sonstiger Informationen nichts gelesen werden

Ok, ich denke, ab hier werde ich es auch so schaffen.
Das eigentliche Problem ist ja nun gefunden und sollte sich nicht allzu schwer lösen lassen.
Ich danke euch für die wirklich gute Hilfe! :)

Mfg, Letavino
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Habe ein svg bild, kann ich das zu svg koordinaten umrechnen, damit ich den Umriss zeichnen kann? Wenn ja wie? Allgemeine Java-Themen 1
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
C UTM Koordinaten in LATITUDE und LONGITUDE umrechnen Allgemeine Java-Themen 13
H MouseEntered mit X und Y Koordinaten Allgemeine Java-Themen 7
MaxG. Kreis Koordinaten Allgemeine Java-Themen 7
4a61766120617274697374 PDF iText Wort Koordinaten auslesen Allgemeine Java-Themen 1
T Geographische in UTM Koordinaten umwandeln Allgemeine Java-Themen 5
I Koordinaten von Fluglinie auf Openstreetmap verfolgen Allgemeine Java-Themen 1
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
K AWT Aus einer Datei die Koordinaten Angaben herauslesen und dreidimensional darstellen Allgemeine Java-Themen 2
Zettelkasten Vektor mit Koordinaten erstellen Allgemeine Java-Themen 2
J JXMapKit Koordinaten korrigieren Allgemeine Java-Themen 4
K Mouse koordinaten im programm Allgemeine Java-Themen 4
Eldorado Berechnung von Koordinaten, die zufällig aussehen Allgemeine Java-Themen 5
S Koordinaten aus einem Text filtern Allgemeine Java-Themen 11
M Radianwert wiederholt sich trotz unterschiedlicher zufälliger Koordinaten Allgemeine Java-Themen 6
S Bild anhand von Koordinaten einteilen Allgemeine Java-Themen 7
B API geographische Koordinaten Allgemeine Java-Themen 9
S Testen einer Anwendung durch klicken von Koordinaten Allgemeine Java-Themen 7
G Wort am Bildschirm -- Koordinaten suchen Allgemeine Java-Themen 2
G Richtung berechnen anhand Koordinaten Allgemeine Java-Themen 3
F Koordinaten eines gedrehten Rechtecks Allgemeine Java-Themen 4
C kürzester weg zwischen zwei Punkten, Koordinaten finden Allgemeine Java-Themen 15
I AWT MouseListener Extra Knopf auf der Maus Allgemeine Java-Themen 9
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
B LEERE JTable MouseListener + popupmenu Allgemeine Java-Themen 2
C MouseListener und Repaint() Allgemeine Java-Themen 6
P MouseListener reagiert 2 Mal Allgemeine Java-Themen 11
T Edit: JLabel+MouseListener oeffnet mehrere Instanzen Allgemeine Java-Themen 5
B MouseListener und KeyListener Allgemeine Java-Themen 15
T MouseListener und MouseMotionListener Allgemeine Java-Themen 3
V MouseListener Allgemeine Java-Themen 2
F Wo MouseListener Positionieren Allgemeine Java-Themen 4
E MouseListener Priorität Allgemeine Java-Themen 4
ElViZ MouseListener auf Linie die per drawLine() gezeichnet wurde? Allgemeine Java-Themen 2
S Anonymen MouseListener entfernen? Allgemeine Java-Themen 2
P Bug mouseListener Allgemeine Java-Themen 2
B Programm soll auf die Eingabe vom Mouselistener warten. Allgemeine Java-Themen 19
M 1. Probleme mit MouseListener, 2. Anwendung in Infobar Allgemeine Java-Themen 8
V MouseListener Allgemeine Java-Themen 9
S MouseListener Allgemeine Java-Themen 18
S Problem Mouselistener Allgemeine Java-Themen 6
G Mouselistener geht aber danach Fehler bei JOptionPane Allgemeine Java-Themen 4
R Global KeyListener/MouseListener Allgemeine Java-Themen 4
H HashMap in HashMap, klappt nicht, Verständnisproblem Allgemeine Java-Themen 2
kodela ArrayList wird nicht komplett gespeichert Allgemeine Java-Themen 3
kodela HelpSet wird nicht gefunden Allgemeine Java-Themen 8
D Compiler-Fehler Compilierung in VM nicht erfolgreich Allgemeine Java-Themen 10
G WSDL-Aufruf funktioniert nicht mehr nach Umstieg auf Maven Allgemeine Java-Themen 4
H KNN Erkennt Zahl Nicht Allgemeine Java-Themen 7
W ICEpdf PDF-Dateien werden mit Java 21 nicht nicht mehr vollständig dargestellt Allgemeine Java-Themen 3
Zrebna Berechnung der Zeit funktioniert nicht wie erwartet: Date, GregorianCalendar Allgemeine Java-Themen 16
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
kodela Textfeld nicht rechteckig Allgemeine Java-Themen 10
G Doppelklick auf Javaprogramm klapt nicht Allgemeine Java-Themen 1
W Timer terminiert nicht Allgemeine Java-Themen 5
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
W Überflüssige Deklaration vermeiden...war da nicht mal was? Allgemeine Java-Themen 3
N lwjgl kann textureSampler nicht finden Allgemeine Java-Themen 4
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
T .Jar kann man nicht ausführen Allgemeine Java-Themen 18
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
N Regex schlägt nicht an Allgemeine Java-Themen 10
Y Wieso krieg ich die Unit Tests nicht hin Allgemeine Java-Themen 55
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
G Popup wird nicht sichtbar Allgemeine Java-Themen 9
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
OnDemand ApacheCommon FTP Client zuckt nicht Allgemeine Java-Themen 3
T JavaPoet - (noch) nicht existente Typen Allgemeine Java-Themen 2
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
T Testing JUnit5: try ... catch arbeitet nicht sauber Allgemeine Java-Themen 6
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
OnDemand MemoryLeak nicht zu finden Allgemeine Java-Themen 26
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
OnDemand Ram Freigabe erfolgt nicht nach Prozessende Allgemeine Java-Themen 18
OnDemand XML desializing Attribute bringt nicht erwartetes Ergebnis Allgemeine Java-Themen 16
T ImageIcon wird nicht angezeigt Allgemeine Java-Themen 6
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
stormyark TikTakToe funktioniert nicht Allgemeine Java-Themen 10
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
Tiago1234 Hauptklasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 38
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
I "Neues" Lizenzmodell Oracle - JRE nicht mehr zur Redistribution freigegeben? Allgemeine Java-Themen 16
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
A code wird nicht ausgeführt Allgemeine Java-Themen 3
Blender3D Alte Beiträge nicht mehr vorhanden Allgemeine Java-Themen 6
M Warum hat Java dieses und jenes nicht... Allgemeine Java-Themen 8
W Bilder werden in App mit Jar-Datei nicht angezeigt Allgemeine Java-Themen 15
Micha43 Applet *.jar läuft nicht auf dem Mac Allgemeine Java-Themen 8
M Warum bekommen ich den Result nicht ? Allgemeine Java-Themen 17
Kiki01 Häufigster Buchstabe lässt sich nicht ermitteln Allgemeine Java-Themen 30

Ähnliche Java Themen

Neue Themen


Oben