我的想法是,将
ImageView和和添加
Circle到中
rootGroup,然后在上应用比例
rootGroup。请参阅下面的示例。
风景:
<AnchorPane id="AnchorPane" fx:id="rootPane" pickonBounds="true" prefHeight="420.0" prefWidth="817.0" snapToPixel="true" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="javafx.scale.Controller"> <children> <Group id="Group" layoutX="0.0" layoutY="0.0" onScroll="#scrolling"> <children> <ScrollPane fx:id="scrollPaneImage" layoutX="0.0" layoutY="0.0" prefHeight="420.0" prefWidth="817.0"> <content> <Group id="Group" fx:id="rootGroup"> </Group> </content> </ScrollPane> </children> </Group> </children></AnchorPane>
控制器:
public class Controller { @FXML private Group rootGroup; private Group zoomGroup; private double scale = 1; public void initialize() { zoomGroup = new Group(); Image image = new Image(getClass().getResourceAsStream("image.jpg")); ImageView imageView = new ImageView(image); imageView.setX(50); imageView.setY(50); Circle circle = new Circle(); circle.setRadius(20); circle.setCenterX(100); circle.setCenterY(200); circle.setFill(Paint.valueOf("RED")); zoomGroup.getChildren().add(imageView); zoomGroup.getChildren().add(circle); rootGroup.getChildren().add(zoomGroup); } public void scrolling(ScrollEvent scrollEvent) { if (scrollEvent.getDeltaY() > 0) { scale += 0.1; } else if (scrollEvent.getDeltaY() < 0) { scale -= 0.1; } zoomGroup.setScaleX(scale); zoomGroup.setScaleY(scale); }}


