Download source from GrowBox.jar
GrowBox.javaimport javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Group;
//import javafx.scene.Cursor;
import javafx.scene.*;
import javafx.event.EventHandler;
import javafx.scene.paint.*;
import javafx.scene.shape.*;
import javafx.collections.*;
import javafx.geometry.Point2D;
import javafx.geometry.Bounds;
import javafx.scene.input.* ;
import javafx.scene.layout.Pane;
import java.lang.Math;
import javafx.scene.control.Button;
import javafx.event.ActionEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import java.util.ArrayList;
public class GrowBox extends Application {
Group grp = new Group();
Rectangle r = null;
double xs,ys,xe,ye;
public void start(Stage stage) {
// Create a border pane
BorderPane pane = new BorderPane();
Scene scene = new Scene(pane, 400, 400);
Pane mypane = new Pane();
pane.setCenter(mypane);
mypane.getChildren().add(grp);
grp.setTranslateX(scene.getWidth()/2);
grp.setTranslateY(scene.getHeight()/2);
double res = 96;
grp.setScaleX(res);
grp.setScaleY(res);
Grid.draw(grp);
grp.setOnMousePressed( e ->
{
//System.out.println("event type " + e.getEventType());
//System.out.println("Local " + e.getX() + " " + e.getY());
xs = e.getX();
ys = e.getY();
r = new Rectangle(xs,ys,0,0);
r.setStroke(Color.BLACK);
r.setStrokeWidth(1/res);
r.setStrokeLineCap(StrokeLineCap.ROUND);
r.setFill(Color.TRANSPARENT);
grp.getChildren().add(r);
}
);
grp.setOnMouseDragged( e ->
{
xe = e.getX();
ye = e.getY();
double width = xe - xs;
if (width>0) r.setX(xs);
else r.setX(xe);
r.setWidth(Math.abs(width));
double height = ye-ys;
if (height>0) r.setY(ys);
else r.setY(ye);
r.setHeight(Math.abs(height));
}
);
grp.setOnMouseReleased( e ->
{
r.setFill(Color.WHITE);
}
);
stage.setTitle("GrowBox");
stage.setScene(scene);
stage.show();
}
}
Maintained by John Loomis, updated Mon Mar 05 12:22:40 2018