Ahojte, zkousel jsem pochopit, jak se v Jave pracuje s jednotlivymi layout managery... na mnoha ceskych i anglickych serverech jsem se docetl, ze mam pouzivat radeji tyto ctyri zakladni: BorderLayout, BoxLayout, FlowLayout a GridLayout, kombinovat je, ze se tim vyhnu vsem problemum a zvladnu temer vse a to citelneji, nez se slozitejsimi layout managery jako GridBagLayout, ci GroupLayout... nejak jsem ale nepochopil, jak s managery pracovat... chtel bych napriklad udelat (zdanlive?) jednoduchou vec... mam frame (JFrame - s nastavenym minimum size na 640x480), v nem panel (JPanel) a v nem tri tlacitka (JButton)... dve z nich chci velike 250x75, umistene pod sebou primo uprostred okna a jedno chci vpravo dole odsazene od spodniho okraje o 30px a od praveho take o 30px... jak to mam udelat? Mohli byste mi prosim napsat tento kod? Treba to podle tohoto prikladu pochopim lepe a dojdou mi i dalsi veci... mockrat dekuji.
Fórum › Java
Layout Managery
Každý z těch manažerů nějakým způsobem rozděluje danou oblast, která mu je vymezena. BorderLayout rozděluje oblast na 5 částí (horní, dolní, levá, pravá, střed), GridLayout rozděluje oblast "tabulkou" (mřížkou) na zvolený počet částí atd.
To doporučení je v podstatě oprávněné, protože s těmi jednoduchými layouty uděláš v podstatě stejnou práci jako s těmi složitými, jenom je musíš vhodně kombinovat.
A to bude asi tvůj problém, že si nevíš rady jak je kombinovat. Předpokládám, že použít každý zvlášť bys dokázal. Minimálně si to můžeš vyzkoušet, což vůbec není od věci. Kombinování se vlastně sestává z toho, že skládáš panely (i do sebe) a teprve do nich vkládáš další komponenty (tlačítka atd.). Když to budeš zkoušet (zejména vkládání panelů do panelů), tak si je různě obarvuj a tím uvidíš, jak je velký, co je jak rozděleno apod.
Takže tvůj případ by se dal řešit třeba takto. Potřebuješ dostat 2 tlačítka doprostřed a jedno vpravu dolu. Neboli první rozdělení bude BorderLayoutem. Do jednotlivých částí umístíš panely (zkus různé barvy). Tomu středovému dáš GridLayout s počtem řádek roven 2 a počtem sloupců roven 1 a vložíš tam ty 2 tlačítka. Spodnímu (dlouhého) panelu nastavíš zase třeba GridLayout s počtem řádek 2 a počtem sloupců 2. Do první buňky vložíš to tlačítko, do druhé panel veliký šiorký 30px a do druhé řádky vložíš 2 panely vysoké 30px.
Samozřejmě to není celé (musel bych to vidět), ale jde o to pochopit princip, několikráte si to zkusit, udělat pár experimentů a pak už budeš schopen dělat rozvržení sám.
Tak uz jsem prisel na to, proc mi to neslo... obarvil jsem si jednotlive "bunky" a kouknul, co se deje... ma filozofie byla - mit frame, v nem jeden hlavni panel... do nej jsem bez jakehokoliv layout manageru (coz znamena, ze se tam dal defaultni - FlowLayout) vlozil dalsich x panelu, ktere meli znazornovat jednotlive stranky... kliknu-li na polozku menu, tak se vsechny daji invisible a ten jeden, pozadovany, se da visible... jenze to je ocividne spatna metoda, protoze diky tomu, ze byly ve FlowLayoutu, tak ty panely nebyly roztazene pres cely frame (resp. ten hlavni panel) a kdyz je dam do BorderLayoutu, logicky vsechny do CENTER, tak se mi nezobrazi ani jeden... vicemene tedy chapu, jak se funguje s layouty a uz chapu, proc to nefunguje mne... prosim tedy jeste o jednu radu... mam vytvorenych x panelu, ktere predstavuji jednotlive stranky aplikace... kliknu-li na tlacitko (ci polozku menu), chci, aby se mi zobrazila urcita stranka (urcity panel)... jednotlivych stranek neni moc - cca do deseti... jak bych to mel nejlepe udelat? (pomoci panelu a nastavovani viditelnosti asi ne, ze? :-( )... mockrat dekuji za radu.
Jeste jednou zdravim... uz jsem na tom dobre, temer vse jsem si rozvrhl, ale uz asi dve hodiny badam nad jednou veci... jaky layout manager mam pouzit, kdyz chci ctyri komponenty (panely) pod sebou, z toho prvni, druhy a ctvrty chci vysoke napr. 40px a ten treti, at se roztahne do zbytku? Zkusil jsem pouzit ruzne BoxLayout a GridLayout a jeste dalsi (zoufale pokusy) kombinace, ale nejak se mi stale nedari to udelat tak, aby byl prvni, druhy a ctvrty vysoky tak, jak zadam a treti se roztahl... pripadne me zkuste navest, at se s tim netrapim tak moc ;-)... mockrat dekuji.
Už to asi máš, ale .....
Ten tvoje rozložení by se dalo řešit jedním BorderLayoutem (horní, střed, dolní) a buď do horní části panel s GridLayoutem (2 řádky) nebo do středu dát panel opět s BorderLayoutem a použít u něj jen horní a střed.
Už to asi máš, ale .....
Ten tvoje rozložení by se dalo řešit jedním BorderLayoutem (horní, střed, dolní) a buď do horní části panel s GridLayoutem (2 řádky) nebo do středu dát panel opět s BorderLayoutem a použít u něj jen horní a střed.
Opet ahojte, mam dalsi dotazek, tentokrat mi zatim vse funguje, ale neco se mi nelibi a nevim, jak to zmenit (jestli se to vubec zmenit da)... mam panel (tento nazvu panel1), pouziji layout manager BorderLayout a do PAGE_START umistim dalsi panel (tento nazvu panel2)... vim, ze z logiky toho, jak vypada cast PAGE_START plyne, ze sirka komponenty panel2 je pres celou sirku komponenty panel1, ale chci-li nastavit vysku komponenty panel2, tak vim jen o jednom zpusobu a to nastavit size, minimumSize, preferredSize, nebo maximumSize... takto ale musim nastavit i sirku i vysku... kod
panel1.getSize();
ale vraci 0... takze kodpanel2.setPreferredSize(new Dimension(panel1.getSize().width, 100));
je stejny jakopanel2.setPreferredSize(new Dimension(0, 100));
a to je preci divne, ne?Jak mam tedy nastavit jen vysku? Jde to? Moc se mi nelibi nastavovat sirku na 0 a vysku jak chci, a to prestoze to funguje... nepujde-li to jinak, je to jasne... proste to nebudu resit ;-)... ale jde to jinak? jak? DekujiJestli se nepletu, tak tohle je stejné:
setPreferredSize(null);
setPreferredSize(new Dimension(0, 0));
a mělo by to znamenat, že se velikost nastavuje automaticky. Takže pro jeden parametr to asi bude fungovat, tak jak chceš a jak se ti to nelíbí :smile1: . A jestli to funguje, tak opravdu není co řešit.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Moderátoři diskuze