Ich habe die folgende Struktur:JavaFX: Zoom und Scroll funktionieren nicht richtig
ScrollPane
Pane
A set of children as ImageView
Die folgende Klasse I aus bekam (wird später den Link hinzufügen, kann es jetzt nicht finden)
public class ZoomController extends ScrollPane{
private int deltaCount = 0;
private final double DEFAULT_ZOOM = 1.0;
private DoubleProperty zoomMax = new SimpleDoubleProperty(10.0);
private DoubleProperty zoomMin = new SimpleDoubleProperty(0.1);
private DoubleProperty zoomDelta = new SimpleDoubleProperty(1.2);
private DoubleProperty zoom = new SimpleDoubleProperty(DEFAULT_ZOOM);
GroupController gc;
public ZoomController(Node content) {
super();
zoom.addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
System.out.println("Zoom=" + zoom.doubleValue());
content.scaleXProperty().bind(zoom);
content.scaleYProperty().bind(zoom);
content.translateXProperty();
}
});
content.setOnScroll(new EventHandler<ScrollEvent>() {
public void handle(ScrollEvent event) {
if (event.getDeltaY() > 0) {
zoomIn();
} else {
zoomOut();
}
}
});
}
public void zoomIn() {
double zoomValue = DEFAULT_ZOOM * Math.pow(zoomDelta.get(), deltaCount + 1);
System.out.println("Zoooom " + zoomValue);
if (zoomValue > zoomMax.get()) {
setZoom(zoomMax.get());
return;
}
deltaCount++;
setZoom(zoomValue);
}
public void zoomOut() {
double zoomValue = DEFAULT_ZOOM * Math.pow(zoomDelta.get(), deltaCount - 1);
System.out.println("Zoooom " + zoomValue);
if (zoomValue < zoomMin.get()) {
setZoom(zoomMin.get());
return;
}
deltaCount--;
setZoom(zoomValue);
}
public void setZoom(double zoomValue) {
zoom.set(zoomValue);
}
}
und unterhalb der Linie knittert das Objekt:
zoomController = new ZoomController(pane);
wenn ich in bin Zoomen, gibt es eine sehr seltsame verhaltens- ist, wenn ich zo om in, Bildlaufleisten an den Seiten erscheinen nicht. Wie werden diese Balken angezeigt?
Wie ich verstehe, ändert die Vergrößerung die Größe des inneren Panels und wenn es größer als das Rollfeld wird, muss auf dem Bildlauffeld Seitenbalken erscheinen.
Es funktioniert! Vielen Dank! – Alex