Gesture Events in JavaFX
In diesem Artikel lernst du die verschiedenen Gesture Events in JavaFX kennen. Dabei handelt es sich um Events die vor allem auf Touch Geräten interessant sind. Das gilt vor allem für Win8 und höher. Da auf Touchdisplays andere Events notwendig sind, wie auf dem PC, ist das wichtig. Wie sonst könnte man z.B. einen Swipe erkennen? 😀
Schauen wir uns mal die verschiedenen Funktionen dazu an.
Beispiele für Gesture Events in JavaFX
// Wird aufgerufen, wenn man das Viereck berührt
rect.setOnTouchPressed(new EventHandler() {
@Override
public void handle(TouchEvent event) {
// gibt Position zurück
System.out.println("Viereck gedrückt bei: " + event.getTouchPoints().toString());
event.consume();
}
});
// Wird aufgerufen, wenn man die Berührung beendet
rect.setOnTouchReleased(new EventHandler() {
@Override
public void handle(TouchEvent event) {
System.out.println("Viereck wurde losgelassen");
event.consume();
}
});
// wir rufen die consume() Methode auf, um den Event aufzubrauchen
// da er sonst unnötig den Prozessor beschäftigen würde
// das Objekt wird nämlich sonst zum Parent übergeben (bubbling)
rect.setId("1");
long touchId = 1;;
double touchx, touchy;
touchx = rect.getX();
touchy = rect.getY();
// diese Funktion wird aufgerufen, wenn wir ein Element bewegen
rect.setOnTouchMoved(new EventHandler() {
@Override public void handle(TouchEvent event) {
if (event.getTouchPoint().getId() == touchId) {
rect.setTranslateX(event.getTouchPoint().getSceneX() - touchx);
rect.setTranslateY(event.getTouchPoint().getSceneY() - touchy);
}
event.consume();
}
});
wir rufen die consume() Methode auf, um den Event aufzubrauchen, da er sonst unnötig den Prozessor beschäftigen würde. Das Objekt wird nämlich sonst zum Parent übergeben (bubbling).
Rotate Beispiel für Gesture Events in JavaFX
// Diese Funktion wird aufgerufen, wenn z.B. der Bildschirm Rotiert wird.
rect.setOnRotate(new EventHandler() {
@Override
public void handle(RotateEvent event) {
rect.setRotate(rect.getRotate() + event.getAngle());
System.out.println("Viereck: Rotatier event" + ", inertia: "
+ event.isInertia() + ", direkt: " + event.isDirect());
event.consume();
}
});
// Diese Funktion wird aufgerufen, wenn die Rotation beginnt
rect.setOnRotationStarted(new EventHandler() {
@Override
public void handle(RotateEvent event) {
System.out.println("Viereck: Rotationsevent hat begonnen");
event.consume();
}
});
// Diese Funktion wird aufgerufen wenn die Rotation fertig ist
rect.setOnRotationFinished(new EventHandler() {
@Override
public void handle(RotateEvent event) {
System.out.println("Viereck: Rotationsevent ist beendet");
event.consume();
}
});
Swipe Beispiel für Gestures in JavaFX
rect.setOnSwipeUp(new EventHandler() {
@Override
public void handle(SwipeEvent event) {
System.out.println("Viereck: Swipe hoch Event");
event.consume();
}
});
rect.setOnSwipeDown(new EventHandler() {
@Override
public void handle(SwipeEvent event) {
System.out.println("Viereck: Swipe Unten Event");
event.consume();
}
});
Das gleiche gilt natürlich für das setOnSwipeLeft und setOnSwipeRight. Diese Funktionen werden eben aufgerufen, wenn der entsprechende Swipe Event ausgelöst wird.
Zoom Events in JavaFX
// Wird aufgerufen, während gezoomt wird
rect.setOnZoom(new EventHandler() {
@Override
public void handle(ZoomEvent event) {
rect.setScaleX(rect.getScaleX() * event.getZoomFactor());
rect.setScaleY(rect.getScaleY() * event.getZoomFactor());
System.out.println("Viereck: Zoom event" + ", inertia: "
+ event.isInertia() + ", direct: " + event.isDirect());
event.consume();
}
});
// Wenn das Zoom Event begonnen wird
rect.setOnZoomStarted(new EventHandler() {
@Override
public void handle(ZoomEvent event) {
System.out.println("Viereck: Zoom Event begonnen");
event.consume();
}
});
// Wird augerufen, wenn das Zoom Event fertig ist
rect.setOnZoomFinished(new EventHandler() {
@Override
public void handle(ZoomEvent event) {
System.out.println("Viereck: Zoom Event beendet");
event.consume();
}
});
Es gibt noch ein Paar andere Gesture events, die Funktionieren jedoch sehr ähnlich.
[image img_id=”6292″ alt=”gesture events in JavaFX” width=”156″ height=”300″]
rect.setOnScroll(new EventHandler() {
@Override
public void handle(ScrollEvent event) {
if (!event.isInertia()) {
rect.setTranslateX(rect.getTranslateX() + event.getDeltaX());
rect.setTranslateY(rect.getTranslateY() + event.getDeltaY());
}
System.out.println("Viereck: Scroll Event" + ", inertia: "
+ event.isInertia() + ", direct: " + event.isDirect());
event.consume();
}
});
rect.setOnScrollStarted(new EventHandler() {
@Override
public void handle(ScrollEvent event) {
System.out.println("Viereck: Scroll begonnen Event");
event.consume();
}
});
rect.setOnScrollFinished(new EventHandler() {
@Override
public void handle(ScrollEvent event) {
System.out.println("Viereck: Scroll beendet event");
event.consume();
}
});