Hallo,
ich habe schon viel in diesem Forum gesucht und auch schon einiges dazugelernt ...doch für dieses Problem konnte ich bis jetzt leider noch nirgends etwas hilfreiches finden.
Ich habe ein Canvas, in dem ich mit einem Mausklick Punkte einzeichnen lassen. Das funktoniert soweit auch schon alles.
Allerdings habe ich noch ein großes Problem.
Wenn ich mit der Maus über mein Canvas fahre, werden zwar nur im Bereich des Canvas die Koordinaten ausgelesen, aber diese Koordinaten beziehen sich auf den gesamten Bildschirm.
Mein Canvas beginnt zum Beispiel an der Stelle (200,80) auf der Shell...wenn ich also mit der Maus über das Canvas fahre, bekomme ich nicht oben links in der Ecke die Koordinten (0,0) angezeigt, sondern die Koordinaten, an welcher Stelle sich die Maus auf dem Bildschirm befindet.
Habe versucht von den Koordinaten, die ich geliefert bekomme, die Position der Shell und dann die Position des Canvas abzuziehen...aber wie ihr unten im Codebeispiel sehen könnt, muss ich immer noch eine Normierung durchführen...also bei den x-Koordinaten 13 und bei den y-Koordinaten zusätzlich 46 abziehen. Dann bekomme ich, egal wo sich die Shell auf dem Bildschirm befindet, links oben im Canvas die (0,0) Koordinaten geliefert.
Naja die Lösung ist aber alles andere als Toll...sobald die Systemschrift verändert wird oder das Programm unter Linux ausgeführt wird, muss ich wieder an den 2 Zahlen drehen...das kann es ja nicht sein
Gibt es eine Möglichkeit, direkt die richtigen Koordinaten aus einem Canvas auszulesen?
Hier das Beispiel:
(die Koordinaten auf der sich die Maus über dem Canvas befindet, werden mir hier zum Testen in einem Textfeld angezeigt)
Vielen Dank schon mal fürs Durchlesen von meinem Text
LG
ich habe schon viel in diesem Forum gesucht und auch schon einiges dazugelernt ...doch für dieses Problem konnte ich bis jetzt leider noch nirgends etwas hilfreiches finden.
Ich habe ein Canvas, in dem ich mit einem Mausklick Punkte einzeichnen lassen. Das funktoniert soweit auch schon alles.
Allerdings habe ich noch ein großes Problem.
Wenn ich mit der Maus über mein Canvas fahre, werden zwar nur im Bereich des Canvas die Koordinaten ausgelesen, aber diese Koordinaten beziehen sich auf den gesamten Bildschirm.
Mein Canvas beginnt zum Beispiel an der Stelle (200,80) auf der Shell...wenn ich also mit der Maus über das Canvas fahre, bekomme ich nicht oben links in der Ecke die Koordinten (0,0) angezeigt, sondern die Koordinaten, an welcher Stelle sich die Maus auf dem Bildschirm befindet.
Habe versucht von den Koordinaten, die ich geliefert bekomme, die Position der Shell und dann die Position des Canvas abzuziehen...aber wie ihr unten im Codebeispiel sehen könnt, muss ich immer noch eine Normierung durchführen...also bei den x-Koordinaten 13 und bei den y-Koordinaten zusätzlich 46 abziehen. Dann bekomme ich, egal wo sich die Shell auf dem Bildschirm befindet, links oben im Canvas die (0,0) Koordinaten geliefert.
Naja die Lösung ist aber alles andere als Toll...sobald die Systemschrift verändert wird oder das Programm unter Linux ausgeführt wird, muss ich wieder an den 2 Zahlen drehen...das kann es ja nicht sein
Gibt es eine Möglichkeit, direkt die richtigen Koordinaten aus einem Canvas auszulesen?
Hier das Beispiel:
(die Koordinaten auf der sich die Maus über dem Canvas befindet, werden mir hier zum Testen in einem Textfeld angezeigt)
Java:
private void createCanvas() {
canvas = new Canvas(sShell, SWT.BORDER);
canvas.setBounds(new Rectangle(200, 80, 289, 209));
canvas.addMouseMoveListener(new org.eclipse.swt.events.MouseMoveListener() {
public void mouseMove(org.eclipse.swt.events.MouseEvent e) {
PointerInfo pointerInfo=MouseInfo.getPointerInfo();
java.awt.Point point=pointerInfo.getLocation();
int testx=point.x-sShell.getLocation().x-canvas.getLocation().x-13; //hier die 13, die ich noch zusätzlich abziehen muss, damit das ganze stimmt...
int testy=point.y-sShell.getLocation().y-canvas.getLocation().y-46; //...und hier die 46
String testx2=String.valueOf(testx);
String testy2=String.valueOf(testy);
text.setText("X: "+testx2+"Y: "+testy2);
}
});
}
Vielen Dank schon mal fürs Durchlesen von meinem Text
LG
Zuletzt bearbeitet: