1

I have a scroll pane in java with content as an anchorpane , the anchorpane has children which are an imageview binded with the anchorpanes height and width so it can fit the anchorpane exactly and also some circles and lines representing a graph. If i enlarge the height or width of the anchorpane then the scroll pane t becomes automatically scrollable giving me the ability to view the image as if it was zoomed , but what im trying to do is zoom in on a specified area on the pic and also , to make the circles and lines change position based on the zoom (maybe using binding properties). The whole idea im trying to implement is have a picture as a map and a graph representing links between cities , but at the same time i was to zoom in on a certain path and have it take the whole pane and navigating between the scroll pane after zooming in.

AnchorPane other;
ImageView image;
ScrollPane scroll;
Button bp;
Button bm;
public void initialize(URL arg0, ResourceBundle arg1) {

    System.out.println("OK");
    Circle c = new Circle(250, 250, 10);
    Circle c2 = new Circle(20, 20, 10);
    Circle c3 = new Circle(40, 200, 10);
    c3.setFill(Color.RED);
    c3.setVisible(true);
    c2.setFill(Color.RED);
    Line line = new Line();
    Line line2 = new Line();
    Line line3 = new Line();
    line.setStartX(c.getCenterX());
    line.setStartY(c.getCenterY());
    line.setEndX(c2.getCenterX());
    line.setEndY(c2.getCenterY());
    line2.setStartX(c.getCenterX());
    line2.setStartY(c.getCenterY());
    line2.setEndX(c3.getCenterX());
    line2.setEndY(c3.getCenterY());
    line2.setVisible(true);
    line2.setStroke(Color.BLUE);
    line3.setStartX(c2.getCenterX());
    line3.setStartY(c2.getCenterY());
    line3.setEndX(c3.getCenterX());
    line3.setEndY(c3.getCenterY());
    line3.setVisible(true);
    line3.setStroke(Color.BLUE);
    line.setVisible(true);
    line.setStroke(Color.BLUE);
    c.setFill(Color.RED);
    c2.setVisible(true);
    c.setVisible(true);
    Rectangle rect = new Rectangle(100, 100, 70, 70);
    other.getChildren().addAll(line, line2, line3, c, c2, c3, rect);
    System.out.println(other.getChildren());
    image.setVisible(true);
    image.fitHeightProperty().bind(other.prefHeightProperty());
    image.fitWidthProperty().bind(other.prefWidthProperty());
    scroll.setPannable(true);
}

public void bpAction() {
    other.setPrefHeight(other.getPrefHeight() + 30);
    other.setPrefWidth(other.getPrefWidth() + 30);
}

public void bmAction() {
    other.setPrefHeight(other.getPrefHeight() - 30);
    other.setPrefWidth(other.getPrefWidth() - 30);
}
  • You should be able to apply the scaling transformation to your line/cycle coordinates as well. `newX = unscaledX * scale; newY = unscaledY * scale`. To zoom in to a specific location adjust `hvalue` and `vvalue` of the `ScrollPane`... – fabian Apr 30 '18 at 10:54

0 Answers0