08. maj 2003 - 18:11Der 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)
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.
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
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å.
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().
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:
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.
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.
Synes godt om
Ny brugerNybegynder
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.