05. oktober 2004 - 20:43Der er
7 kommentarer og 1 løsning
GridBagLayout og at fordele 50/50
jeg bruger GridBagLayout og placerer to JPanels der skal dele bredden med 50% hver. Panelerne indeholder tekster, der bliver sat løbende. Koden ser sådan her ud, hvor p1 og p2 er de to paneler.
Problemet er at de ikke deler bredden 50/50, men at fordelingen ændre sig basert på hvilket panel der indeholder den længeste tekst. Hvordan undgår jeg dette?
Når du bruger c.weighty og c.weightx skal du som udgangspunkt sætte størrelsen på dine paneler, det gælder alle 3. setPreferredSize() setMinimumSize() setMaximumSize()
c.weightx = 0.5; er faktisk en meget høj værdi, prøv at ændre til c.weightx = 0.01; hvilket vil give langt bedre performance, og når vi snakker 50/50 er 0.01 rigeligt.
Jeg bruger selv null-layout (se ex. http://javabog.dk/OOP/kapitel11.html#afsn11.6.1) til placering af forskellige paneler, buttons osv. Ved godt at det ikke besvarer dit spørgsmål, men nævner det alligevel, da jeg personligt finder det x100 nemmere at sætte tingene op med samt redigere i. God arbejdslyst.
Hej Carsten. Jeg fandt også ud af at jeg kunne få en helt lige fordeling ved at bruge setMaximumSize. Men jeg vil godt lade mit paneler vokse (i hvert tilfælde i højden) alt efter indhold. Internet i panelet bruges BoxLayout.Y_AXIS, hvilket afskærer tekster i bredden, når de er breddere end panelet, og samtidigt tilpasser højden efter antal linier.
Mener du det med "weightx" og at man skal bruge lave værdier? Hvis ja, så begrund det, så jeg forstår!
Ja, jeg mener man skal bruge lave x/y værdier men, at begrunde det på en forståelig måde, er straks meget værre. Du vil opleve betydningen af lave/høje x/y værdier i en tung gui med et GridBagLayout som indeholder flere end 2 x 2 celler og hvor hver komponent skal have forskellig dimension og tillige er forskellige mht. om de skal fylde cellen ud i henholdsvis højde og/eller bredde. Her vil du, godt nok kun i brøkdele af sekunder kunne opleve at komponenterne lige som "glider" ud på deres respektive pladser. Så min erfaring med GridBagLayout, siger lave værdier.
Hvis du har sat din komponent til at fylde hele cellen ud, vil den ALTID gøre det, UANSET hvad du har sat MinimumSize, MaximumSize og PreferredSize til og du vil derfor altid kunne ydnytte hele højden/ bredden. Så du opgiver/ mister altså ikke højden når du bruger setMaximumSize.
En min/max størrelse er nødvendig for at GridBagLayoutet kan finde ud af hvor den eventuelle EKSTRA plads skal anvendes.
Jeg sætter altid PreferredSize på mine komponenter på "normal" vis, min. og max. gøres efter følgende model
java.awt.Component[] c = panel.getComponents();
for(int i = 0; i < c.length; i++){ c[i].setMinimumSize( c[i].getPreferredSize() ); c[i].setMaximumSize( c[i].getPreferredSize() ); }
Det er nok det tætteste jeg kommer på en forklaring
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.