VPJ gang 3

Komponenter

4.7.5 Øvelse: Samspil med layout-manager

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:

  1. null-layout
    Prøv at ændre vinduets størrelse. Hvilke metoder bliver kaldt?

  2. 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?

  3. BorderLayout, hvor layout-manager bestemmer vinduets størrelse
    (dvs. vinduet har fået kaldt pack() for at pakke komponenterne optimalt)

  4. 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.

4.7.6 Opgave: Adresseindtastningskomponent

  1. 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.

  2. Lav en nulstil-knap, der rydder alle indtastningsfelterne. Brug evt. udviklingsværktøjet til at generere koden for overvågning af knappens hændelser.

  3. 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?

  4. 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()).

  5. 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.

Analyse

Husk at de, der ikke har fremlagt projekt endnu forventes at fremlægge noget på tirsdag!