diff --git a/simpleexample/src/main/java/simpleex/ui/DraggableNodeController.java b/simpleexample/src/main/java/simpleex/ui/DraggableNodeController.java index 8ff284ce88317d023dfc3d0975a95b75ae4d4262..e3325203ee6663ea025d2be677f24a93cda970ea 100644 --- a/simpleexample/src/main/java/simpleex/ui/DraggableNodeController.java +++ b/simpleexample/src/main/java/simpleex/ui/DraggableNodeController.java @@ -1,6 +1,5 @@ package simpleex.ui; -import java.util.Optional; import javafx.event.EventHandler; import javafx.geometry.Point2D; import javafx.scene.Node; @@ -8,16 +7,14 @@ import javafx.scene.input.MouseEvent; public class DraggableNodeController { - public DraggableNodeController() {} + private final NodeDraggedHandler nodeDraggedHandler; - public DraggableNodeController(final Optional<NodeDraggedHandler> nodeDraggedHandler) { - setNodeDraggedHandler(nodeDraggedHandler); + public DraggableNodeController() { + this(null); } - private Optional<NodeDraggedHandler> nodeDraggedHandler = Optional.empty(); - - public final void setNodeDraggedHandler(final Optional<NodeDraggedHandler> nodeDraggedHandler) { - this.nodeDraggedHandler = nodeDraggedHandler; + public DraggableNodeController(final NodeDraggedHandler nodeDraggedHandler) { + this.nodeDraggedHandler = (nodeDraggedHandler != null ? nodeDraggedHandler : (node, x, y) -> {}); } private boolean immediate = false; @@ -26,7 +23,7 @@ public class DraggableNodeController { this.immediate = immediate; } - private Optional<Node> currentNode = Optional.empty(); + private Node currentNode = null; private Point2D startPoint = null; private Point2D startTranslate = null; @@ -47,17 +44,16 @@ public class DraggableNodeController { } private void mousePressed(final MouseEvent mouseEvent) { - if (currentNode.isEmpty() && mouseEvent.getSource() instanceof Node) { - currentNode = Optional.of((Node) mouseEvent.getSource()); + if (currentNode == null && mouseEvent.getSource() instanceof Node) { + currentNode = (Node) mouseEvent.getSource(); startPoint = new Point2D(mouseEvent.getSceneX(), mouseEvent.getSceneY()); - startTranslate = - new Point2D(currentNode.get().getTranslateX(), currentNode.get().getTranslateY()); + startTranslate = new Point2D(currentNode.getTranslateX(), currentNode.getTranslateY()); mouseEvent.consume(); } } private void mouseDragged(final MouseEvent mouseEvent) { - if (currentNode.isPresent() && currentNode.get() == mouseEvent.getSource()) { + if (currentNode != null && currentNode == mouseEvent.getSource()) { final double dx = mouseEvent.getSceneX() - startPoint.getX(); final double dy = mouseEvent.getSceneY() - startPoint.getY(); updateNode(dx, dy); @@ -65,28 +61,26 @@ public class DraggableNodeController { } protected void updateNode(final double dx, final double dy) { - if (immediate && nodeDraggedHandler.isPresent()) { - nodeDraggedHandler.get().nodeDragged(currentNode.get(), dx, dy); + if (immediate) { + nodeDraggedHandler.nodeDragged(currentNode, dx, dy); startPoint = startPoint.add(dx, dy); - } else if (currentNode.isPresent()) { - currentNode.get().setTranslateX(startTranslate.getX() + dx); - currentNode.get().setTranslateY(startTranslate.getY() + dy); + } else if (currentNode != null) { + currentNode.setTranslateX(startTranslate.getX() + dx); + currentNode.setTranslateY(startTranslate.getY() + dy); } } private void mouseReleased(final MouseEvent mouseEvent) { - if (currentNode.isPresent() && currentNode.get() == mouseEvent.getSource()) { + if (currentNode != null && currentNode == mouseEvent.getSource()) { final double dx = mouseEvent.getSceneX() - startPoint.getX(); final double dy = mouseEvent.getSceneY() - startPoint.getY(); if (!immediate) { - currentNode.get().setTranslateX(startTranslate.getX()); - currentNode.get().setTranslateY(startTranslate.getY()); - } - final Node node = currentNode.get(); - currentNode = Optional.empty(); - if (nodeDraggedHandler.isPresent()) { - nodeDraggedHandler.get().nodeDragged(node, dx, dy); + currentNode.setTranslateX(startTranslate.getX()); + currentNode.setTranslateY(startTranslate.getY()); } + final Node node = currentNode; + currentNode = null; + nodeDraggedHandler.nodeDragged(node, dx, dy); } } diff --git a/simpleexample/src/main/java/simpleex/ui/FxAppController.java b/simpleexample/src/main/java/simpleex/ui/FxAppController.java index f58187bcb376058965280aeb1328215296bea665..134d375d09565cb21becb6fe55da4109fae3d047 100644 --- a/simpleexample/src/main/java/simpleex/ui/FxAppController.java +++ b/simpleexample/src/main/java/simpleex/ui/FxAppController.java @@ -89,10 +89,10 @@ public class FxAppController { zoomSlider.setValue(8); markersParent = new MapItemsControl<MapNode>(); mapView.getChildren().add(markersParent); - draggableMapController = new DraggableNodeController(Optional.of(this::handleMapDragged)); + draggableMapController = new DraggableNodeController(this::handleMapDragged); draggableMapController.setImmediate(true); draggableMapController.attach(mapView); - draggableMarkerController = new DraggableNodeController(Optional.of(this::handleMarkerDragged)); + draggableMarkerController = new DraggableNodeController(this::handleMarkerDragged); // the location list locationListView.getSelectionModel().selectedIndexProperty() .addListener((prop, oldValue, newValue) -> updateMapMarker(true));