11.2. Komponenter

Komponenter er objekter, der bruges som en synlig del af en grafisk brugergrænseflade, f.eks. knapper, valglister, indtastningsfelter, mærkater.

Alle komponenter arver fra Component-klassen og har derfor dennes træk til fælles:

Metoderne setForeground(Color c) og setBackground(Color c) sætter farven hhv. baggrundsfarven for komponenten, svarende til egenskaberne foreground og background. Egenskaberne kan aflæses med getForeground() og getBackground().

En anden egenskab er font, der bestemmer skrifttypen. I tråd med de andre egenskaber sættes den med setFont(Font f) og aflæses med getFont().

Dette kan sammenfattes i en tabel over egenskaber, der er fælles for alle komponenter.

Tabel 11-1. Java

Egenskab Type Sættes med Læses med
foreground Color setForeground(Color c) getForeground()
background Color setBackground(Color c) getBackground()
font Font setFont(Font f) getFont()
visible boolean setVisible(boolean synlig) isVisible()

Nedenfor vil de mest almindelige komponenter blive beskrevet. Kun de nye egenskaber er beskrevet.

11.2.1. Button

Figur 11-3. En trykknap. Egenskaben label angiver, hvad der står på knappen.

Tabel 11-2. Java

Egenskab Type Sættes med Læses med
label String setLabel(String t) getLabel()

11.2.2. Checkbox

Figur 11-4. Et afkrydsningsfelt. Kan både bruges til flueben og til radioknapper. Hvis man skal have radioknapper (der gensidigt udelukker hinanden), skal objekterne knyttes sammen af et CheckboxGroup-objekt.

label angiver, hvad der står ved feltet. state angiver, om feltet er afkrydset.

Tabel 11-3. Java

Egenskab Type Sættes med Læses med
label String setLabel(String t) getLabel()
state boolean setState (boolean afkrydset) getState()

11.2.3. Choice

Figur 11-5. En valgliste. Brug metoden add(String elementnavn) til at tilføje indgange.

Med getSelectedItem() undersøger man, hvad brugeren har valgt.

11.2.4. TextField

Figur 11-6. Et indtastningsfelt på en linje. Egenskaben text angiver, hvad der står i feltet.

Mindre brugt er: columns angiver, hvor bredt feltet skal være.

editable angiver, om brugeren kan redigere teksten i indtastningsfeltet.

echoChar bruges til felter, der skal skjule det indtastede, typisk adgangskoder.

Sæt f.eks. echoChar til '*' for at få vist stjerner i stedet for det indtastede.

Tabel 11-4. Java

Egenskab Type Sættes med Læses med
text String setText(String t) getText()
editable boolean setEditable(boolean rediger) isEditable()
columns int setColumns(int bredde) getColumns()
echoChar char setEchoChar(char tegn) getEchoChar()

11.2.5. TextArea

Figur 11-7. Et indtastningsfelt på flere linjer.

Egenskaberne text, rows og columns angiver, hvad der står i feltet, hhv. bredde og højde.

Tabel 11-5. Java

Egenskab Type Sættes med Læses med
text String setText(String t) getText()
editable boolean setEditable(boolean rediger) isEditable()
columns int setColumns(int bredde) getColumns()
rows int setRows(int højde) getRows()

TextField og TextArea har en del egenskaber til fælles, og disse fællestræk ligger i superklassen TextComponent (se klassediagrammet).

11.2.6. Label

Figur 11-8. En mærkat der viser en tekst (som brugeren ikke kan redigere i).

Egenskaben text angiver, hvad der står i feltet.

Tabel 11-6. Java

Egenskab Type Sættes med Læses med
text String setText(String t) getText()

11.2.7. List

Figur 11-9. En menu, hvor flere af indgangene kan ses samtidigt, og hvor man kan vælge en eller flere elementer. Brug metoden add(String elementnavn) til at tilføje indgange.

Med isIndexSelected(int index) undersøger man, om en indgang er valgt.

Egenskaberne rows og multipleMode angiver, hvad højden er, og om man kan vælge flere indgange samtidigt.

Tabel 11-7. Java

Egenskab Type Sættes med Læses med
rows int setRows(int højde) getRows()
multipleMode boolean setMultipleMode(boolean m) getMultipleMode()

11.2.8. Canvas

Et tegne-område. Canvas er lidt besværlig, idet man skal nedarve fra klassen og implementere paint(Graphics g) for at kunne tegne noget.

En lettere (men ikke nødvendigvis altid smartere) måde er som sagt at definere paint()-metoden direkte i appletten/vinduet som vi har gjort tidligere.