čtvrtek 23. února 2012

JViewport aneb jak umístit prvek do středu?

Při práci se JScrollPane jsem narazil na menší problém - jak umístit label doprostřed JPanel, který obsahuje zmíněný JScrollPane? Zjistil jsem, že teda JScrollPane v sobě obsahuje instanci JViewport, který označuje ta část, která je vidět (něco jako kukátko u dalekohledu). Pro zjištění polohy středu JViewport tedy stačí zjistit její souřadnici + velikost a vydělit 2. Neboli takto:

Rectangle viewRectangle = _scrollPane.getViewport().getViewRect();
int xCoord = (viewRectangle.width + _labelLoadingPanel.getWidth())/2 + viewRectangle.x;
int yCoord = (viewRectangle.height + _labelLoadingPanel.getHeight())/2 + viewRectangle.y;

Vypadá to docela easy. Ale než jsem na to přišel :D Setkal jsem se totiž s dalšími problémy:
  1. JViewport obsahuje metodu getExtentSize() pro zjištění velikosti zobrazované části. Problém byl v tom, že tato metoda nevracelo velikost jako takové, ale souřadnice dolního pravého rohu (RTFM, RTFM).
  2. Tento problém nijak nesouvisí s JViewport, ale znemožňovalo mi posunovat prvek. Celý problém byl v tom, že NetBeansovský Free Layout z nějakého neznámého důvodu vůbec neposunoval prvek. Stačí zkusit jiný Layout Manager a vše běželo jak drak.
Jdu pokračovat, hola.

Žádné komentáře:

Okomentovat