package jcgp.gui.dragresize; import javafx.event.EventHandler; import javafx.scene.Cursor; import javafx.scene.input.MouseEvent; import javafx.scene.layout.Region; import jcgp.gui.GUI; /** * * http://andrewtill.blogspot.co.uk/2012/12/dragging-to-resize-javafx-region.html * * */ public class VerticalDragResize { private boolean dragging = false; private final Region region; private VerticalDragResize(Region region) { this.region = region; } public static void makeDragResizable(final Region region) { final VerticalDragResize dr = new VerticalDragResize(region); region.setOnMousePressed(new EventHandler() { @Override public void handle(MouseEvent event) { dr.mousePressed(event); } }); region.setOnMouseDragged(new EventHandler() { @Override public void handle(MouseEvent event) { dr.mouseDragged(event); } }); region.setOnMouseMoved(new EventHandler() { @Override public void handle(MouseEvent event) { dr.mouseMoved(event); } }); region.setOnMouseReleased(new EventHandler() { @Override public void handle(MouseEvent event) { dr.mouseReleased(); } }); } private void mousePressed(MouseEvent event) { if(isInDraggableZone(event)) { dragging = true; } } private void mouseDragged(MouseEvent event) { if(dragging) { double newHeight = region.getHeight() - event.getY(); if (newHeight >= region.getMinHeight()) { region.setPrefHeight(newHeight); } else { region.setPrefHeight(region.getMinHeight()); } } } private void mouseMoved(MouseEvent event) { if(isInDraggableZone(event) || dragging) { region.setCursor(Cursor.V_RESIZE); } else { region.setCursor(Cursor.DEFAULT); } } private void mouseReleased() { dragging = false; region.setCursor(Cursor.DEFAULT); } private boolean isInDraggableZone(MouseEvent event) { return event.getY() < (GUI.RESIZE_MARGIN); } }