Hallo Leute ,
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) {
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();
}
}