/* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. */ import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.input.KeyEvent; import javafx.stage.Stage; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.geometry.Rectangle2D; import javafx.stage.Screen; import javafx.scene.shape.Line; import javafx.scene.text.Text; import javafx.scene.text.Font; import javafx.scene.text.TextAlignment; import javafx.geometry.Bounds; import javafx.scene.shape.Circle; import javafx.scene.paint.Paint; import javafx.scene.input.MouseEvent; import javafx.scene.input.TouchEvent; import javafx.animation.FadeTransition; import javafx.util.Duration; public class TouchCalibration extends Application { /** * @param args the command line arguments */ public static void main(String[] args) { Application.launch(args); } static int deltaX; static int deltaY; static Group pointer; static Group root = new Group(); static Line swCursor_vline = new Line(); static Line swCursor_hline = new Line(); @Override public void start(Stage stage) { stage.setTitle("Hello Calibration"); Rectangle2D bounds = Screen.getPrimary().getVisualBounds(); //set background Rectangle right = new Rectangle(bounds.getWidth()/2, bounds.getHeight()); right.setX(0); right.setY(0); right.setFill(Color.LIGHTGRAY); root.getChildren().add(right); Rectangle left = new Rectangle(bounds.getWidth()/2, bounds.getHeight()); left.setX(bounds.getWidth()/2); left.setY(0); left.setFill(Color.WHITE); root.getChildren().add(left); Text rightPaneTitle = new Text("Mirror - inactive"); rightPaneTitle.setFont(new Font(25)); rightPaneTitle.setX((right.getWidth()-rightPaneTitle.getLayoutBounds().getWidth())/2); rightPaneTitle.setY(50); Text leftPaneTitle = new Text("Touch the cross-hair on this side and \nsee its reflrection on the right size"); leftPaneTitle.setFont(new Font(25)); leftPaneTitle.setX(((right.getWidth()-leftPaneTitle.getLayoutBounds().getWidth())/2) + left.getX()); leftPaneTitle.setTextAlignment(TextAlignment.CENTER); leftPaneTitle.setY(50); root.getChildren().addAll(rightPaneTitle, leftPaneTitle); //left cross hair int leftCrossHairMiddleX = (int)(left.getWidth()/2 +left.getX()); int leftCrossHairMiddleY = (int)(left.getHeight()/2); Group leftCrossHair = createCrossHair(leftCrossHairMiddleX, leftCrossHairMiddleY); //add background to listen to events Rectangle background = new Rectangle(leftCrossHairMiddleX-150, leftCrossHairMiddleY-150, 300, 300); background.setFill(Color.WHITE); background.setStroke(Color.BLACK); leftCrossHair.getChildren().add(background); background.toBack(); int rightCrossHairMiddleX = (int)(right.getWidth()/2 +right.getX()); int rightCrossHairMiddleY = (int)(right.getHeight()/2); Group rightCrossHair = createCrossHair(rightCrossHairMiddleX, rightCrossHairMiddleY); root.getChildren().addAll(rightCrossHair, leftCrossHair); deltaX = leftCrossHairMiddleX - rightCrossHairMiddleX; deltaY = leftCrossHairMiddleY - rightCrossHairMiddleY; background.setOnMouseMoved(new EventHandler () { @Override public void handle(MouseEvent event) { int centerX = (int)(event.getX()-deltaX); int centerY = (int)(event.getY()-deltaY); swCursor_vline.setStartX(centerX); swCursor_vline.setEndX(centerX); swCursor_vline.setStartY(centerY-10); swCursor_vline.setEndY(centerY+10); swCursor_hline.setStartX(centerX-10); swCursor_hline.setEndX(centerX+10); swCursor_hline.setStartY(centerY); swCursor_hline.setEndY(centerY); } }); background.setOnTouchPressed(new EventHandler () { @Override public void handle(TouchEvent event) { int centerX = (int)(event.getTouchPoint().getSceneX()-deltaX); int centerY = (int)(event.getTouchPoint().getSceneY()-deltaY); swCursor_vline.setStartX(centerX); swCursor_vline.setEndX(centerX); swCursor_vline.setStartY(centerY-10); swCursor_vline.setEndY(centerY+10); swCursor_hline.setStartX(centerX-10); swCursor_hline.setEndX(centerX+10); swCursor_hline.setStartY(centerY); swCursor_hline.setEndY(centerY); } }); background.setOnTouchMoved(new EventHandler () { @Override public void handle(TouchEvent event) { int centerX = (int)(event.getTouchPoint().getSceneX()-deltaX); int centerY = (int)(event.getTouchPoint().getSceneY()-deltaY); swCursor_vline.setStartX(centerX); swCursor_vline.setEndX(centerX); swCursor_vline.setStartY(centerY-10); swCursor_vline.setEndY(centerY+10); swCursor_hline.setStartX(centerX-10); swCursor_hline.setEndX(centerX+10); swCursor_hline.setStartY(centerY); swCursor_hline.setEndY(centerY); } }); root.getChildren().addAll(swCursor_vline, swCursor_hline); Scene scene = new Scene(root, bounds.getWidth(), bounds.getHeight()); stage.setScene(scene); stage.show(); stage.requestFocus(); } private Group createCrossHair(int x, int y) { //create cross-hair Group crossHair = new Group(); Line hLine = new Line(x - 100, y, x+100, y ); Line vLine = new Line(x, y - 100, x, y +100 ); crossHair.getChildren().addAll(vLine, hLine); for (int i = 1 ; i < 4 ; i++) { Circle circle = new Circle(x, y, i*20); circle.setFill(null); circle.setStroke(Color.BLACK); circle.setStrokeWidth(1); crossHair.getChildren().add(circle); } return crossHair; } }