Avatar billede jespersahner Nybegynder
08. maj 2003 - 18:11 Der er 13 kommentarer og
1 løsning

GridBagLayout og GridBagConstraints

Jeg forsøger at lave en applikation, hvor jeg anvender GridBagLayout. Dette fungerer på den måde, at man opretter et GridBagConstraints-objekt, hvor placering, højde, bredde mv. er angivet, som jeg løbende tilretter inden jeg tilføjer mine panel's, button's osv. Tilføjelsen sker med f.eks. this.add(panel1,g), hvor g er GridBagConstraints-objektet, og hvor this peger på f.eks. et Frame-objekt.

Mit spm. er nu flg.:
Hvordan opdaterer jeg de enkelte "celler" i grid'en, hvis jeg ønsker at placering, højde, bredde etc. ændrer sig i en specifik celle?

Kunne en metode være:
this.remove(panel1);
..ændre i GridBagConstraints-objektet
this.add(panel1,g)

- eller er dette en helt forkert tankegang?
Avatar billede viht Nybegynder
08. maj 2003 - 19:11 #1
Det kan godt blive et problem hvis du vil ændre i GBC koordinater under runtime. Andre komponenter omkring det du ændrer skal jo ofte også opdateres i det nogle af dem måske bruger index værdier du gerne vil udvide din komponent til.
Avatar billede _carsten Nybegynder
08. maj 2003 - 21:07 #2
Helt og aldeles enig med viht !

Og denne vil give for meget flimmer !
this.remove(panel1);
..ændre i GridBagConstraints-objektet
this.add(panel1,g)

Hvis du vil "udskifte" komponenter i gui'en, så gør det på den måde, at du under initieringen af gui'en, adder flere komponenter i den samme celle, det kan nemlig sagtens lade sig gøre, sørg dog for at komponenterne har samme størrelse, ellers bliver det rent ud sagt noget komøg at se på.

Herefter bruger du:  komponentXXXX.setVisible(true);
                    komponentYYYY.setVisible(false);

til at styre hvilken komponent i cellen der skal være synlig når gui'en vises
Avatar billede viht Nybegynder
08. maj 2003 - 21:16 #3
Det er i det hele taget noget værre bøvl. Hvorfor i alverden vil du også gøre det?
Avatar billede _carsten Nybegynder
08. maj 2003 - 21:33 #4
Enig igen !

Men ser fornuftigt ud HVIS komponenterne har samme størrelse
Avatar billede viht Nybegynder
08. maj 2003 - 21:40 #5
Keep it simple :)
Avatar billede _carsten Nybegynder
08. maj 2003 - 21:44 #6
And that's the way of doing it :-)
Avatar billede jespersahner Nybegynder
09. maj 2003 - 01:08 #7
Hov, hov..det her med noget værre bøvl er vist en overdrivelse :-)
Min applikation skal fungere på den måde, at når jeg klikker på visse celler, så sker der en ekspansion af grid'en og dermed af hele layout'et, så jeg har afgjort brug for at ændre i GBC-konstanterne.

Men, men..det skal understreges, at jeg absolut er novice, så der er måske en helt anden måde at gøre det hele på.
Avatar billede viht Nybegynder
09. maj 2003 - 01:14 #8
Kan du ikke give et eksempel fra en applikation vi kender? Jeg kan ikke lige forestille mig hvad du mener.
Avatar billede jespersahner Nybegynder
09. maj 2003 - 12:06 #9
Jeg har ikke lige et eksempel fra "den virkelige verden", men forestil dig, at f.eks. at du får præsenteret en tabel med data, hvor du så efterfølgende har behov for at indsætte rækker eller søjler i tabellen (data ekspanderes).

I mit tilfælde er tabellens celler ikke lige store (det er derfor jeg bruger GridBagLayout), så jeg har behov for dynamisk at kunne ændre i grid'en, når nye celler kommer til.

Men, men..faktisk har jeg nu fået det til at virke nogenlunde fornuftigt med:
remove(panel1);
..ændre i GBC-konstanterne
add(panel1,g)

- efterfulgt af validate() og/eller pack().

Jeg er dog nysgerrig efter at vide,om der ikke findes en mulighed for udelukkende at opdatere GBC-konstanterne og grid'en uden at remove'e og add'e mit panel - det virker lidt klodset, at der skal så meget til. Man kan jo godt opdatere f.eks. skrifttype og -størrelse uden større besvær udelukkende med revalidate().
Avatar billede viht Nybegynder
09. maj 2003 - 12:10 #10
Med det samme du siger tabel tænker jeg JTable. På et JTable objekt kan du on the fly indsætte kolonner og rækker, er det ikke bedre så?
Avatar billede jespersahner Nybegynder
09. maj 2003 - 14:35 #11
Nej, jeg tror ikke JTable opfylder mit behov, idet cellerne i min applikation ikke er "lige store" i den forstand, at visse celler "gaber over" flere andre celler osv. I en simpel udgave kunne min tabel f.eks. se således ud:

***************
*      *    *
*      *******
*      *    *
***************

Jeg vil dog ikke helt afvise, at selv sådanne udseender kan bygges op af JTable's inden i hinanden osv. Tak for tippet :-)
Avatar billede _carsten Nybegynder
09. maj 2003 - 15:50 #12
Det er yderst fornuftigt du ikke er afvisende overfor JTable, for selvfølgelig er JTable DET ENESTE RIGTIGE til lige netop dén opgave !

http://www2.gol.com/users/tame/swing/examples/SwingExamples.html
Avatar billede viht Nybegynder
09. maj 2003 - 16:18 #13
Det kommer jo også lidt an på hvad der skal være i cellerne. Det er begrænset hvilke komponenter du kan have i cellerne på JTable. F.eks. knapper er lidt besværlige at have i celler.
Avatar billede jespersahner Nybegynder
10. maj 2003 - 14:56 #14
carsten, det er et spændende link du har givet mig, takker! Det er præcis noget i stil med GroupableHeader-eksemplet jeg har behov for.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester