In JavaFX if you want the user to be able to zoom the contents inside a scrollpane here’s a small gotcha that you have to be aware of: to accomplish this you must wrap the contents of the scroll node inside a group so that the visual bounds (not the layout bounds) are used for layout calculations.
Scrolling can than be attained by setting a scaling transform on the contents of the Scrollpane and adjusting the scale value to meet the specified zoom level.
Here’s a small snippet of code to illustrate how you could do it:
public class ZoomableScrollPane extends ScrollPane{
Group zoomGroup;
Scale scaleTransform;
Node content;
(…)
public ZoomableScrollPane(Node content)
{
this.content = content;
Group contentGroup = new Group();
zoomGroup = new Group();
contentGroup.getChildren().add(zoomGroup);
zoomGroup.getChildren().add(content);
setContent(contentGroup);
scaleTransform = new Scale(scaleValue, scaleValue, 0, 0);
zoomGroup.getTransforms().add(scaleTransform);
(…)
}
(…)
}
JavaPins
Java desktop links of the week, September 30 | Jonathan Giles
JavaFX links of the week, September 30 // JavaFX News, Demos and Insight // FX Experience
Just be prepared for a massive performance drop (up to 100x) when zooming in your scroll pane with JavaFX 2.2 and earlier.