2D-Grafik Skalieren der Scrollbars beim Zoomen einer JScrollPane

Fabian23

Aktives Mitglied
Hallo zusammen,

ich habe gerade erfolgreich das zentrierte Zoomen in einem JScrollPane implementiert. Folgenden Code verwende ich dafür:

Java:
AffineTransform old= graphics2D.getTransform();
AffineTransform tr2 =AffineTransform.getTranslateInstance(-x, -y);
AffineTransform  tr= AffineTransform.getScaleInstance(scale,scale);
tr.concatenate(tr2); tr2=tr;
tr =AffineTransform.getTranslateInstance(x, y);
tr.concatenate(tr2); tr2=tr;

tr= new AffineTransform(old);
tr.concatenate(tr2);  tr2=tr;

graphics2D.setTransform(tr2);

// Das Zeichen der Shapes.

graphics2D.setTransform(old);

Auch die Größe des JPanels, das in der JScrollPane enthalten ist, passe ich an. Funktioniert auch alles wunderbar, bis auf die Tatsache, dass die Scrollbars nicht richtig skalieren. Damit meine ich, das sie beim zentrierten Zoomen beispielsweise ganz oben bzw. ganz links bleiben. Dadurch verschwindet irgendwann das selbst gezeichneten am oberen Rand, da ich nicht nach oben scrollen kann.

Kennt das Problem jemand und weiß eine Lösung, wie ich die ScrollBars richtig mit berechnen kann?

Viele Grüße,
Fabian
 
Nein, leider nicht.

Die Scrollbars passen sich von der Größe auch an, das ist kein Problem. Was sie nicht machen, ist, sich an den aktuellen ViewPort anzupassen. Wenn ich im Zentrum bin und weiter skaliere, bleiben die Scrollbars am oberen bzw. linken Rand.

Viele Grüße
 
auch wenn ich hoffe/erwarte, dass das du sowas schon ausprobiert hast...sicher ist sicher 😉

hast du den gleichen Mist auch auf die JViewport ausprobiert?

Java:
jsp.getViewport().validate();
jsp.getViewport().repaint();
 
Hatte ich auch ausprobiert.

Für mich macht es den Eindruck, als bekommt die ScrollPane nicht mit, dass ich beispielsweise im Zentrum bin, sich die Größe verändert und die Scrollbars demnach auch anders vergrößert werden müssen. Sie sollen ja auch zentriert werden.

Ich hatte mal irgendwo eine Lösung mit
Code:
setViewPosition()
gesehen, weiß aber nicht, wie ich das einsetzen soll.

Grüße
 

Zurück
Oben