import javafx.scene.Node; import javafx.scene.paint.Color; import javafx.scene.shape.Path; import javafx.scene.shape.Rectangle; import javafx.scene.shape.Shape; import javafx.scene.shape.StrokeType; class Rebounder { Rectangle lasso; double px; double py; Rebounder() { lasso = new Rectangle(0, 0); lasso.setFill(null); lasso.setSmooth(false); lasso.setStroke(Color.RED); lasso.setStrokeWidth(1); lasso.setStrokeType(StrokeType.OUTSIDE); lasso.setMouseTransparent(true); lasso.setVisible(false); } Rectangle start(double x, double y) { lasso.setX(x); lasso.setY(y); lasso.setWidth(0); lasso.setHeight(0); px = x; py = y; lasso.setVisible(true); return lasso; } Rectangle rebound(double x, double y) { lasso.setWidth(Math.abs(x - px)); lasso.setHeight(Math.abs(y - py)); lasso.setX(Math.min(x, px)); lasso.setY(Math.min(y, py)); return lasso; } Rectangle stop(double x, double y) { rebound(x, y); lasso.setVisible(false); return lasso; } boolean isStopped() { return !lasso.isVisible(); } Node getLasso() { return lasso; } Shape shapeBuilder(Rectangle r) { return r != null ? Path.subtract( ScreenCapture.getScreenCapture().screenBounds, r) : new Rectangle( ScreenCapture.getScreenCapture().screenBounds .getWidth(), ScreenCapture.getScreenCapture().screenBounds .getHeight()); } }