© 1999-2003,
Flemming Koch Jensen
Alle rettigheder forbeholdt |
Tekstfelter |
Vi skal i dette kapitel se på en række klasser, som gør det muligt at lave tekstfelter - dvs. grafiske komponenter de arbejder med simpel tekst. | |||
Klasserne er vist i følgende klasse-hierarki; hvor de klasse vi ikke gennemgår er markeret med gråt: | |||
Figur 1: Klasse-hierarkiet for klasserne i dette kapitel |
| ||
JTextField og JPasswordField arbejder med en enkelt linie tekst, mens JTextArea kan arbejde med flere linier. | |||
Tekstfelterne understøtter copy/cut/paste i forhold til clipboard, og det er derfor muligt at kopiere tekst frem og tilbage mellem andre programmer og tekstfelter i et Java-program. | |||
Vedrørende event-håndtering, melder man sig som ActionListener, og håndterer ActionEvent's på sædvanlig vis. Dette gør sig gældende for alle tre klasser, og vi vil ikke i dette kapitel studere event-håndteringen. | |||
1. JTextField | |||
JTextField er et tekstfelt der kun tillader en linie tekst. Som alle de andre tekstfelter tillader den at brugeren retter i teksten, og dens primære formål er at modtage input fra denne. | |||
Betragt følgende vindue: | |||
Figur 2: JTextField med otte kolonner |
| ||
Der er lavet med følgende frame: | |||
Source 1: JTextField med otte kolonner |
| ||
Vi har her lavet et JTextField med otte kolonner. Det er gjort med en af følgende konstruktorer: | |||
| |||
Antallet af kolonner (eng: columns) man angiver som parameter ganges med den maksimale bredde for tegn i den aktuelle font. Det giver normalt en betydelig større bredde end man skulle forvente, idet der kan stå langt mere end otte tegn. | |||
De andre konstruktorer gør det muligt at sætte en initiel tekst: | |||
Figur 3: JTextField med otte kolonner og initiel tekst |
| ||
Brugeren kan vælge at arbejde videre med denne tekst, rette i den eller slette den. | |||
Nok er JTextFields primære anvendelse at modtage input fra brugeren, men den kan også bruges til at vise en tekst. I så fald skal man forhindre brugeren i at rette i tekstfeltet, hvilket gøres med metoden: | |||
| |||
Metoden er nedarvet fra JTextComponent, og kalder man den med false bliver feltets baggrund gråt, og brugeren kan ikke ændre i indholdet: | |||
Figur 4: JTextField der ikke er editerbart |
| ||
Man kan anvende denne mulighed til dynamisk at gøre det betinget, af visse omstændigheder, om teksten kan ændres. | |||
Det er også muligt at ændre om teksten er venstre-, højre-stillet eller centreret. | |||
Det gøres med metoden: | |||
| |||
Parameteren skal være en af følgende tre konstanter: | |||
| |||
I den følgende figur har vi valgt at bruge CENTER. | |||
Figur 5: Alignment sat til CENTER |
| ||
Øverst har vi vinduet med den initielle tekst, og nederst har vi slettet teksten for at skrive en anden. | |||
Man ser at tekstområdet hele tiden centreres, og ved det tomme tekstfelt bliver cursoren placeret i midten. | |||
2. JPasswordField | |||
JPaswordField er, som det ses af figur 1, en subklasse til JTextField. Den føjer kun én ny egenskab til tekstfeltet, nemlig at man ikke kan se hvad man skriver. | |||
Følgende er et eksempel på et JPasswordField hvor jeg har indtastet administrator-password'et til min PC: | |||
Figur 6: JPassword-Field med otte kolonner |
| ||
Man henter det password brugeren indtaster med metoden: | |||
| |||
Konstruktorerne er nøjagtig de samme som JTextField's. | |||
Den eneste variationsmulighed, som findes i JPasswordField er hvilket tegn, der skal bruges som erstatning for de tegn brugeren indtaster. Default er '*', men man kan selv vælge et tegn med metoden: | |||
| |||
F.eks. kan vi ændre det til '?': | |||
Figur 7: JPassword-Field med anden echochar |
| ||
med følgende frame: | |||
Source 2: JTextField med anden echochar |
| ||
3. JTextArea | |||
JTextArea giver mulighed for at arbejde med flere linier, dvs. med mere dokument-orienterede tekster. | |||
Betragt følgende vindue: | |||
Figur 8: JTextArea med otte kolonner og fire linier |
| ||
Der er lavet med følgende frame: | |||
Source 3: JTextArea med otte kolonner og fire linier |
| ||
I figuren har vi været i gang med at skrive tekst i tekstfeltet, og som man ser er der plads til fem linier (første parameter til konstruktoren) og de otte kolonner (anden parameter), der svarer til otte gange den maksimale bredde for tegn i den aktuelle font. | |||
Man kan indstille en række egenskaber ved JTextArea. F.eks. kan man angive hvor mange mellemrum tabulering skal betyde med metoden: | |||
| |||
F.eks.: | |||
Figur 9: JTextArea med tabulering sat til tre |
| ||
Hvor der er lavet en række tabuleringer. Default for tabulering er 8. | |||
Hvis man fortsætter med at skrive på en linie, vil man fortsætte ud af den synlige del af tekstfeltet og den tekst man skriver vil ikke kunne ses. Med følgende to metoder kan man indstille JTextArea så den foretager automatiske linieskift for at undgå dette. | |||
| |||
Hvis man kalder setLineWrap med true, vil der blive indsat linieskift når der ikke er plads til flere tegn på en linie. Hvis man kalder setWrapStyleWord med true vil disse linieskift ske mellem ord, dvs. ved mellemrum. | |||
F.eks.: | |||
Figur 10: JTextArea med wrap mellem ord |
| ||
Der laves med følgende frame: | |||
Source 4: JTextArea med wrap mellem ord |
| ||