Download source from GrowBox.jar
GrowBox.java
import 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