Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science mluckner@mini.pw.edu.pl http://www.mini.pw.edu.pl/~lucknerm
Wszystkie komponenty są rozmieszczane przez domyślny menadżer wyglądu Menadżer wyglądu aranżuje kontrolki wewnątrz okna 2
Każdy pojemnik (Container) ma przypisany menadżer wyglądu Menadżer wyglądu jest dowolną klasą implementującą interfejs LayoutManager Przypisuje się go przy pomocy metody setlayout() void setlayout(layoutmanager layoutmanager) Jeżeli nie wywołamy metody setlayout używany będzie domyślny menadżer 3
Usuń menadżera wyglądu setlayout(null ) Ustal pozycję komponentów poprzez metodę setbounds( ) wywoływaną dla każdego z nich osobno Rozmiar komponentów jest kontrolowany przez dodatkowe metody getpreferredsize( ) getminimumsize( ) 4
Wady Ustalanie ręcznie położenia wielu kontrolek jest ciężką pracą Czasami informacje na temat szerokości i długości kontrolek są niedostępne lub nieaktualne Zalety Niektóre efekty są trudne do uzyskania w sposób automatyczny 5
FlowLayout BorderLayout GridLayout CardLayout BoxLayout SpringLayout GridBagLayout GroupLayout 6
Domyślny menadżer Prosty układ, kontrolki układają się jak tekst. Domyślnie kontrolki są układane jedna po drugiej poczynając od górnego lewego narożnika 7
FlowLayout( ) FlowLayout(int how) FlowLayout(int how, int horz, int vert) how Wyrównanie linii horz Horyzontalna przestrzeń między kontrolkami vertz Wertykalna przestrzeń między kontrolkami 8
Wspólny styl dla okien. Tworzy cztery wąskie przestrzenie na krawędziach i dużą przestrzeń w centrum 9
BorderLayout( ) BorderLayout(int ho rz, int vert) Komponenty dodajemy do regionów void add(component component, Object region) Regiony BorderLayout.PAGE_START BorderLayout.PAGE_END BorderLayout.LINE_START BorderLayout.LINE_END BorderLayout.CENTER Lub kierunki (BorderLayout.NORTH ) 10
Układa komponenty w dwu wymiarowej tabeli Wszystkie obiekty mają taki sam rozmiar 11
GridLayout( ) GridLayout(int numrow s, int numcolumns) GridLayout(int numrow s, int numcolumns, int horz, int vert) GridLayout( ) tworzy jedną kolumnę numrows Liczba wierszy numcolumns Liczba kolumn 12
Składa się z kilku kart Każda z kart może być w dowolnej chwili przesunięta na wierzch Zazwyczaj karty są definiowane jako JPanel 13
CardLayout( ) CardLayout(int horz, int vert) Dodawanie kart void add(component panelobj, Object name) Nawigacjia void first(container deck) void last(container deck) void next(container deck) void previous(container deck) void show(container deck, String cardname) 14
15
Ustawia kontrolki jedna nad drugą lub w jednym rzędzie Używa niewidocznych komponentów jako wypełniaczy 16
BoxLayout(Container targ et, int axis) axis definiuje kierunek Wypełniacze, które można dodać do kontenera Box.createRigidArea(size) Box.createHorizontalGlue() Box.createVerticalGlue() new Box.Filler(minSize, prefsize, maxsize) 17
Bardzo elastyczny menadżer wyglądu, który emuluje cechy innych menadżerów A także skomplikowany i trudny w użyciu Przydatny do tworzenia formularzy 18
19
Dostarcza więcej swobody w rozmieszczaniu komponentów Każdy komponent może mieć inny rozmiar, Każdy wiersz może mieć inną liczbę kolumn 20
Położenie i rozmiar każdego komponentu jest definiowana poprzez dołączone do niego niezmienniki. Niezmienniki są przechowywane w obiekcie typu GridBagConstraints. Komponenty są dodawane wraz z zestawem niezmienników add(component comp, GridBagConstraints cons) 21
gridx, gridy Definiuje wiersz i kolumnę, w której leży górny lewy róg komponentu gridwidth, gridheight Definiuje liczbę kolumn (gridwidth) i wierszy (gridheight) zajmowanych przez komponent. fill Definiuje sposób wypełnienia dla komponentów mniejszych niż wielkość komórki. 22
ipadx, ipady Definiuje dodatkową przestrzeń wokół komponentu insets Definiuje zewnętrzną przestrzeń wokół komponentu anchor Definiuje położenie wewnątrz komórki weightx, weighty Dystrybucja kontrolki pomiędzy kolumnami (weightx) i wierszami(weighty); 23
24
Działa oddzielnie dla układu horyzontalnego i vertykalnego 25
Układ horyzontalny Układ wertykalny 26
mluckner@mini.pw.edu.pl 5/6/2014 27
28
FlowLayout Panel z przyciskami, rozwiązania tymczasowe BorderLayout Główne okno GridLayout Zestaw jednakowych komponentów CardLayout Panel opcji BoxLayout, SpringLayout Proste formularze GridBagLayout, GroupLayout Złożone interfejsy 29
Unikaj narzędzi, które nie opierają interfejsu na menadżerach wyglądu Narzędzie powinno przetłumaczyć działania projektanta na operacje w ramach GroupLayout lub GridBagLayout Netbeans Swing GUI Builder Eclipse Window Builder Pro 30