© 1999-2003,
Flemming Koch Jensen
Alle rettigheder forbeholdt |
JRadioButton |
Figur 1: JRadioButtons placering i klasse-hierarkiet |
| |
Betragt følgende vindue: | ||
Figur 2: Tre RadioButtons i et vindue |
| |
Dette vindue laves med følgende program: | ||
Source 1: Tre RadioButtons i frame |
| |
Prøv: |
Kør eksemplet - og vælg nogle af
knapperne! |
|
Hvis man prøver ovenstående program, vil knapperne blot virke som så mange andre knapper. Det eneste specielle ved dem er at de er runde, ellers ligner de CheckBox'es. | ||
Det interessante ved instanser af JRadioButton er at de kan samles i en gruppe, hvoraf kun en kan være valgt. Eksemplet med Tuner (radio), CD og Aux (auxiliary) er taget fra et musikanlæg, hvor kun en af de tre lydkilder kan være valgt. | ||
For at opnå denne indbyrdes udelukkelse, hvor kun en af dem kan være valgt, skal man bruge en instans af ButtonGroup. De tre knapper meldes til instanser af ButtonGroup, og den administrerer den gensidige udelukkelse. | ||
Man tilmelder knapperne med add-metoden som for enhver anden container. | ||
Vi vil udbygge vores eksempel med en sådan ButtonGroup, samt initialisere ved at vælge én af knapperne. | ||
Source 2: Tre RadioButtons i ButtonGroup |
| |
Prøv: |
Kør eksemplet - og vælg nogle af
knapperne! |
|
Man ser her at de tre JRadioButtons add'es til gruppen som vi ikke bevarer en refrence til, da vi aldrig får brug for at arbejde med den igen. | ||
Man ser også, at den første radiobutton vælges ved at anvende en anden konstruktor. Lad os se hvilke konstruktorer der er. | ||
1. Konstruktorer | ||
JRadioButton har følgende konstruktorer: | ||
| ||
Disse konstruktorer giver mulighed for at anvende alle kombinationsmuligheder for de tre parametre man kan bruge ved instantieringen. | ||
Parameteren selected angiver om knappen er valgt fra starten - default er false. | ||
Der kan, som for JLabel, anvendes et icon. Følgende er et eksempel: | ||
Figur 3: JRadioButton med icon |
| |
Iconet træder i stedet for angivelsen af, om knappen er valgt eller ej, og det er dermed ikke længere muligt at se dette. | ||
2. Event-håndtering | ||
Det gør ikke den store forskel om man tilmelder sig en JRadioButton som ActionListener eller ItemListener. Der er dog den forskel, at man som ActionListener også modtager events nå der trykkes på en radiobutton, der allerede er valgt. Når den er i en gruppe, vil dette ikke ændre dens tilstand, og event'en er i virkeligheden ligegyldig. | ||
Vi vil derfor demonstrere hvordan vi kan modtage ItemEvents fra vores tre radiobuttons fra før. | ||
Source 3: Tre RadioButtons i ButtonGroup |
| |
Som enhver ItemListener skal vi implementere metoden: | ||
| ||
I forbindelse med denne implementation identificerer vi event'en ophav ved at gemme referencer til de tre radiobuttons som instansvariable. | ||
Man bemærker ligeldes at vi add'er os (framen) til alle tre radiobuttons. | ||
Prøv: |
Kør eksemplet - og tryk på nogle
af knapperne! |
|
Når man kører eksemplet bemærker man, at der sendes to events hver gang vi vælger en ny knap. Først kommer der en event fra den knap, som ikke længere er valgt; hvor efter der kommer en event fra den knap der nu er valgt. | ||
Det giver mulighed for at knytte en handling til hver af disse begivenheder, og ikke kun til den sidste. Det betyder dog, at man skal være i stand til at skelne de to events fra hinanden. Det gøres vha. metoden | ||
| ||
på den JRadioButton der sendte event'en. | ||
Vi kan udbygge itemStateChanged med en anvendelse af denne metode: | ||
Source 4: Tre RadioButtons i ButtonGroup |
| |
3. JToggleButton | ||
Figur 4: JToggleButtons placering i klasse-hierarkiet |
| |
JToggleButton er superklasse til JCheckBox og JRadioButton. Den er ikke abstrakt og man kan derfor lave instanser af den. | ||
Betragt følgende vindue: | ||
Figur 5: To JToggle-Buttons i et vindue |
| |
Her har vi to instanser af JToggleButton. Den til højre er valgt, i modsætning til den til venstre. JToggleButton implementerer on/off-egenskaben for en knap. Det er den egenskab som vi kender fra både både JCheckBox og JRadioButton. | ||
JToggleButtons kan have en tekst eller et icon, eller begge dele, idet den har de samme konstruktorer som JRadioButton. | ||