Problem z ustawieniem widoku na środku JScrollPane

0

Witam wszystkich.

Mam pewien problem... Program z grafiki komputerowej(transformacje 2D). Wszystko działa oprócz ustawienia widoku na srodek układu współrzędnych wyrysowanych na scroll'u=środek scroll'a(nie widoku scroll'a ale całości, tego co jest widoczne po przejechaniu niżej).

Po wczytaniu rastra mam taki efekt - OK.
user image

Po np a raczej w szczególności po skalowaniu mam taki efekt - układ współrzędnych jest zupełnie gdzie indziej niż widok na JScrollPane - ŹLE :)

user image

Efekt jaki mnie interesujeto taki jak na początku czyli:

user image

Kod odpowiedzialny za to:
scroll[0].getViewport().setViewPosition(new Point(rastrowy.getWidth()/2,rastrowy.getHeight()/2));

rastrowy to obiekt klasy Rastrowy (oczywista oczywistiosc), polami tej klasy sa m.in. obrTrans (przeksztalcony obraz) i obrOryg (ten wczytany na poczatku). Powyższy kod reaguje na stale wartości Point(0,0) czy (500;500) ale na rastrowy.get... juz nie - dziwne, bo przy wczytaniu obrazu po raz pierwszy kod jest identyczny i jest ok...

Jednym słowem jak wyznaczyć środek JScrollPane (całego, a nie tego widocznego w okienku) ?

Z góry dzieki za rady :)

0

Czym dokładnie jest "rastrowy.get[...]"? Powinieneś brać wymiary wczytanego rastra, a nie wymiary komponentu na którym go (jak sądzę) wyświetlałeś. W końcu po to rzutujesz widok na obiekt, który z założenia jest "większy" niż scroll i panel na którym jest umieszczony.

0

No właśnie chodzi mi o rozmiar CAŁEGO scroll'a - dlaczego? Na scrollu rysuje układ współrzędnych (jak widać na img), osie tego układu skalowane są symetrycznie - czyli jesli obraz jest w lewym dolnym rogu (wartości z osi wsp. x=(-iles tam,0) y=(-iles tam,0) czyli gdzies daleko, bo zadane było takie przesunięcie) to automatycznie wszystkie inne "podosie" x=(0,iles tam) y=(0,iles tam) maja taka sama wartość max(czyli to 'iles tam'). Chcąc miec ustawiony widok na srodek ukl.wsp=srodek scroll'a musze znac jego rozmiary... czyli szerokosc calego scroll'a/2 = to moje 'iles tam'

Źle myślę ?

//scroll[0] to po Prostu JScrollPane (jeden z dwóch scrolli/zakładek)
cos takiego jak scroll[0].getViewport().setViewPosition(new Point(scroll[0].getPreferredSize().width/2 , scroll[0].getPreferredSize().height/2);
nic nie daje...
próbowałem też repaintować rastra przetworzonego w danej transformacji przed/po ustawianiem ViewPosition ale nic...

0

A nie możesz po prostu logować danych, które lecą jako argumenty setViewPosition? Albo przynajmniej wyślij je na konsolę, żeby dowiedzieć się co ty tak naprawdę tam pakujesz? Wydaje mi się, że robisz jakiś prosty błąd koncepcyjny (wynikający np. z niedoczytania javadoca) i możliwe że nie mówimy o tym samym.

0

Nie wiem już sam... Sysem wypisywalem te wartosci...
dziwne jest to, ze scroll[0].getPreferredSize().width (w System.out'cie) działa jakby dobrze... na poczatku jest szerokosc 595 (rozmiar scroll'a), po powiekszeniu (3x,4y) jest 1200 ok, przy kolejnym takim samym powiekszeniu 3600 i te wartości przewijajac scroll'a i szacując liczbe pixeli wydaja się sensowne. Czyli jest to rozmiar scroll'a CAŁEGO (to o co mi chodzilo) ale zaaplikowanie tego do setViewPosition juz nie działa - tzn działa po wczytaniu oryginalnego rastra i jednokrotnym skalowaniu, przy kolejnym takim samym skalowaniu znowu nic... WTF? ;/

0

no, udalo sie... :D

wartości takie jak pisałem wyżej sa ok, należało dodać jedna linijke kodu...

scroll[0].setViewportView(rastrowy); i odpowiednio dla wektorowego.

Ale ktoś moze wytlumaczyć co ten setViewportView() tak na prawdę "robi" ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1