Ret GentagTekst så den fortæller sin
foretrukne størrelse til containeren (definér
getPreferredSize() - se afsnit 4.2.3). Indfør også
minimumsstørrelse (getMinimumSize()).
Skriv ud til skærmen,
når metoderne kaldes, så du kan følge med i,
hvordan samspillet mellem layout-manager og komponent fungerer.
Det er vigtigt at du har flere komponenter op containeren, da nogle layout-managere ellers ikke har behov for at spørge til din komponents størrelse
Eksperimentér med forskellige layout-managere og se, hvordan metoderne indvirker på layoutet:
null-layout
Prøv at ændre
vinduets størrelse. Hvilke metoder bliver kaldt?
BorderLayout, hvor
vinduets størrelse er på forhånd fastlagt
(dvs.
vinduet har fået kaldt setSize() og validate())
Prøv
at ændre vinduets størrelse. Hvilke metoder bliver
kaldt?
BorderLayout, hvor layout-manager bestemmer
vinduets størrelse
(dvs. vinduet har fået kaldt
pack() for at pakke komponenterne optimalt)
GridBagLayout, både
med på forhånd fastlagt størrelse, og hvor
layout-manager bestemmer vinduets størrelse
Prøv at
ændre vinduets størrelse. Hvilke metoder bliver kaldt?
Bemærk: Du skal ikke selv kalde getPreferredSize() eller getMinimumSize(), men du skal undersøge hvornår layout-manageren kalder disse metoder.
Lav komponenten Adresseindtastning, der arver
fra Panel (eller JPanel).
Bruger du et
udviklingsværktøj, så start med at lave en ny
Frame (eller JFrame), og design adresseindtastningen der. Ændr
derefter til at arve fra Panel (eller JPanel).
Start med at
bruge null-layout. Når alle felter og knapper er placeret
nogenlunde, som de skal, skiftes der til GridBagLayout.
Der skal
være indtastningsfelterne: fornavn,
efternavn, gade, postnr og by.
Lav en nulstil-knap, der rydder alle indtastningsfelterne. Brug evt. udviklingsværktøjet til at generere koden for overvågning af knappens hændelser.
Gå derefter i gang med at lave det til en bønne med nogle egenskaber: For hvert indtastningsfelt er der den tilsvarende egenskab (dvs. get- og set-metode) i Adresseindtastning. Er det nødvendigt at definere ekstra variabler for at understøtte egenskaberne? Hvorfor/hvorfor ikke?
Udvid med egenskaben gyldig, der er sand, hvis alle felter er udfyldt, og postnummeret er numerisk. Egenskaben skal kun kunne aflæses (dvs. kun isGyldig() skal defineres, ikke setGyldig()).
Udvid med understøttelse af lytning på
Action-hændelser i bønnen (dvs. du skal definere
addActionListener() og removeActionListener()
som beskrevet i afsnit 4.3.5).
Tilføj en OK-knap. Når
den trykkes ned, skal din komponent sende en Action-hændelse.