java SWING - centrovanie komponentu

Programovacie jazyky, rady, poradňa...
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

java SWING - centrovanie komponentu

Príspevok od používateľa paralen »

Ahoj,
Spravil som si vlastny komponent (akasi stvorcova mriezka vykreslena cez Graphics2D, pricom dedim JPanel) a potrebujem ju vycentrovat horizontalne a VYPLNIT vertikalne, aby sa pri resize-ovani prekreslovala (zvacsovala a zmensovala).
Skusal som rozne Layout-y (Grid , Border, Flow,...) , ale nikdy som sa nedopracoval k pozadovanemu vysledku :( . Bud je vyplnena vertikalne (co je ok) a zaroven ma lavy horizontalny alignment (co nechcem) , alebo je cisto v strede a pri resize-ovani je velkost stale ta ista (prefferedSize) - cize komponent na tu udalost nereaguje.

Screeny pre nazornost v prilohe.
Inak v tom komponente, ktory som si spravil by som sice mohol tu celu mriezku vykreslit do stredu (nezacal by som stvorce vykreslovat od [0,0] ale od stredu), no potom ked budem odchytavat suradnice (aby som zistil na ktory stvorcek sa kliklo), tak prvy stvorec by sa zacinal napr. na [63,0] atd... co nie je velmi fajn :nono: a taktiez o taketo veci sa ma starat Layout manazer...

Vdaka
Prílohy
screen1.jpg
screen2.jpg
screen2.jpg (14.68 KiB) 626 zobrazení
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: java SWING - centrovanie komponentu

Príspevok od používateľa javatar »

no ako si to skusal cez ten border layout? lebo na to by som pouzil ten...
http://download.oracle.com/javase/1.4.2 ... ayout.html
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

Re: java SWING - centrovanie komponentu

Príspevok od používateľa paralen »

Kód: Vybrať všetko

BorderLayout rozlozenie = new BorderLayout();
jPanel1.setLayout(rozlozenie);
Grid grid = new Grid();     //to je moja mriezka      
jPanel1.add(grid, BorderLayout.CENTER);
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Re: java SWING - centrovanie komponentu

Príspevok od používateľa konyk87 »

Len taká otázka - kliknutie budeš zachytávať na "formulári" alebo na samotnom komponente? Lebo v prípade, že na samotnom komponente, tak jeho pozícia na formulári predsa na súradnice kliknutia nebude mať vplyv, nie? :)
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

Re: java SWING - centrovanie komponentu

Príspevok od používateľa paralen »

Na samotnom komponente.
Lebo v prípade, že na samotnom komponente, tak jeho pozícia na formulári predsa na súradnice kliknutia nebude mať vplyv, nie?
Ano to je pravda, preto chcem ten komponent vycentrovat, a nie umelo posunut celu mriezku
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Re: java SWING - centrovanie komponentu

Príspevok od používateľa konyk87 »

Až teraz som si všimol tú poznámku na prvom obrázku a tá ma len utvrdila v tom, že jediný reálne použiteľný Layout Manager je null :D
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

Re: java SWING - centrovanie komponentu

Príspevok od používateľa paralen »

No zatial to tak vypada :?
V Delphi/Lazarus/Visual Studio sa to da za par sekund naklikat...Tu som este na to neprisiel, ale vo Swingu som zatial novy, takze nechcem krivdit...
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Re: java SWING - centrovanie komponentu

Príspevok od používateľa konyk87 »

Aj tu sa dá, myslím...Ale neviem už presne, ako funguje pridávanie vlastných komponentov na formulár v Netbeanse (ak dobre vidím na tom prvom obrázku)...Pre teba by bolo jednoduchšie asi niečo takéto (v prípade, že je niečo také "povolené"), kde si môže s komponentmi ľubovolne pohybovať:

Kód: Vybrať všetko

jPanel1.setLayountManager(null);
Grid grid = new Grid();     //to je moja mriezka     
grid.setBounds(x, y, sirkaMriezky, vyskaMriezky);
jPanel1.add(grid);
S tým, že pokiaľ chceš mať komponent (hore) v strede, tak...

Kód: Vybrať všetko

grid.setBounds(panel1.getWidth()/2-sirkaMriezky/2, y, sirkaMriezky, vyskaMriezky);
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

Re: java SWING - centrovanie komponentu

Príspevok od používateľa paralen »

Vdaka , pomohlo :)

//autoeditácia príspevku (09 Apr 2011, 20:31)
Opat potrebujem s tym pomoc, tak sem napisem. Do okna som pridal 2 dalsie panely. Opat je situcia taka, ze tu mriezku(panel1) potrebujem mat vycentrovanu v strede a zvysok miesta ma po stranach vyplnit panel2 a panel3, pre lepsiu predstavivost obrazok v prilohe.

Dakujem za kazdu pomoc

ach to je peklo ten swing :D , zlate delphi
Prílohy
1.jpg
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Re: java SWING - centrovanie komponentu

Príspevok od používateľa konyk87 »

Skúsil by som BorderLayout, potom by šírka panela 2 a 3 závisela od ich obsahu...

Kód: Vybrať všetko

JPanel rodicovskyPanel = new JPanel();
rodicovskyPanel.setLayout(new BorderLayout());

JPanel panel1 = new JPanel();
rodicovskyPanel.add(panel1, BorderLayout.CENTER);

JPanel panel2 = new JPanel();
rodicovskyPanel.add(panel2, BorderLayout.WEST);

JPanel panel3 = new JPanel();
rodicovskyPanel.add(panel3, BorderLayout.EAST);

add(rodicovskyPanel);
Tú mriežku v paneli môžeš skúsiť vycentrovať takto, ale nie som si istý, či sa bude rozťahovať na celú výšku panela:

Kód: Vybrať všetko

Grid grid = new Grid();
JPanel panel1 = new JPanel();
panel1.setHorizontalAlignment(JPanel.CENTER);
panel1.add(grid);
rodicovskyPanel.add(panel1, BorderLayout.CENTER);
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

Re: java SWING - centrovanie komponentu

Príspevok od používateľa paralen »

Ten prvy kod som uz tiez skusal, ale problem je v tom, ze BorderLayout implicitne prisposobuje ostatne komponenty podla komponentu v Border.CENTER, cize velkost panela2 a panela3 sa automaticky nemeni, stale je ta ista, meni sa len velkost panela1

Pri tom druhom kode mi hadze chybu, ze trieda JPanel nema premennu CENTER a taktiez ze panel1 nema metodu setHorizontalAlignment
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Re: java SWING - centrovanie komponentu

Príspevok od používateľa konyk87 »

Šírka tých krajných komponentov je stále rovnaká - najmenšia, aká môže byť, aby sa do nej zmestili komponenty (pokiaľ to umožňuje rodičovský kontajner)... Ak ti to nevyhovuje tak budeš musieť použiť zrejme niečo rafinovanejšie a komplikovanejšie (GridBagLayout?)

V tom druhom sa ospravedlňujem - správne je:

Kód: Vybrať všetko

panel1.setAlignmentX(JPanel.CENTER_ALIGNMENT);
avšak neroztiahne to komponent do výšky
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

Re: java SWING - centrovanie komponentu

Príspevok od používateľa paralen »

A nevedel by si nejak blizsie napisat ako ? Teraz som skusal v NB to do gridbaglayout naklikat, ale nefunguje mi to... velkost bunky je taka velka ako najvacsi komponent... a celkovo to vobec nereaguje na resize atd... :(
Vdaka
Napísať odpoveď