|
Klassen JOptionPane giver en lang række muligheder for hurtigt at lave dialogboxe. På den måde slipper man for selv at lave subklasser af JDialog, men må naturligvis leve med de begrænseninger det giver. |
|
Der findes fire slags dialogboxe i JOptionPane: |
|
- MessageDialog
- ConfirmDialog
- InputDialog
- OptionDialog
|
|
En MessageDialog bruger til at give brugeren en meddelelse. Med en ConfirmDialog får man brugeren til at træffe et valg. En InputDialog bruger til at hente et input fra brugeren. OptionDialog er en kombination af de tre første |
|
Vi vil i det følgende gennemgå disse fire standard dialogboxe. |
|
1. MessageDialog |
|
Med metoden: |
|
void JOptionPane.showMessageDialog( Component parent, Object message ) |
|
kan man vise en besked i en simpel dialogbox. |
|
F.eks. giver følgende kald |
Source 1: |
JOptionPane.showMessageDialog( null, "Besked" );
|
|
denne dialogbox: |
Figur 1:
Simpel MessageDialog |
|
|
Med følgende metode: |
|
void JOptionPane.showMessageDialog( Component parent, Object message,
String title, int messageType ) |
|
er der flere muligheder. |
|
Ud over man nu selv kan angive den titel der skal stå øverst i vinduet, med parameteren title, er det også muligt at give dialogboxen en bestemt messageType, der afspejles i det icon der vises. De fem forskellige typer er givet ved følgende fem konstanter: |
|
JOptionPane.ERROR_MESSAGE
JOptionPane.INFORMATION_MESSAGE
JOptionPane.QUESTION_MESSAGE
JOptionPane.WARNING_MESSAGE
JOptionPane.PLAIN_MESSAGE |
|
De fem mulige typer er her vist med message sat til konstantens navn og title sat til "MessageDialog". |
Figur 2:
De fem typer |
|
|
Man ser at den eneste forskel på dialogboxene er iconet. |
|
Det er bemærkelsesværdigt at parameteren message er et Object. Hvis man angiver et grafisk komponent som paramter, bliver det add'ed og fungerer. Hvis det ikke er et grafisk komponent, kaldes toString og den returnerede tekst vises. |
|
Hvis man f.eks. angiver en JButton får dialogboxen følgende udseende: |
Figur 3:
message som instans af JButton |
|
|
Hvis man anfører en instans af Date får: |
Figur 4:
message som instans af Date |
|
|
Der findes en tredie metode som tager en femte parameter: |
|
void JOptionPane.showMessageDialog( Component parent, Object message,
String title, int messageType,
Icon icon ) |
|
F.eks.: |
Figur 5:
Med eget icon |
|
|
Det icon man anfører som femte parameter bliver anvendt i stedet for standard-iconet, som hører til typen. Det kan undre, at man overhovedet skal anføre en type (jeg ved ikke hvorfor!). |
|
2. ConfirmDialog |
|
Med metoden: |
|
int JOptionPane.showConfirmDialog( Component parent, Object message ) |
|
kan man bede brugeren bekræfte noget. |
|
F.eks. giver følgende kald |
Source 2: |
JOptionPane.showConfirmDialog( null, "Okay?" );
|
|
denne dialogbox: |
Figur 6:
Simpel Confirm-Dialog |
|
|
Metoden returnerer en integer, som fortæller hvad brugeren valgte. Tallet er en af følgende konstanter: |
|
JOptionPane.YES_OPTION
JOptionPane.NO_OPTION
JOptionPane.CANCEL_OPTION
JOptionPane.CLOSED_OPTION |
|
Den sidste af disse returneres, hvis bruger vælger at lukke vinduet i stedet for at trykke på en af knapperne. |
|
Der findes en række andre metoder der viser en ConfirmDialog: |
|
int JOptionPane.showConfirmDialog( Component parent, Object message,
String title, int optionType )
int JOptionPane.showConfirmDialog( Component parent, Object message,
String title, int optionType,
int messageType )
int JOptionPane.showConfirmDialog( Component parent, Object message,
String title, int optionType,
int messageType, Icon icon ) |
|
De er analoge til dem vi så under MessageDialog. Den eneste forskel ligger i den ekstra parameter optionType. |
|
optionType skal vær en af følgende konstanter: |
|
JOptionPane.YES_NO_OPTION
JOptionPane.YES_NO_CANCEL_OPTION |
|
Vi så ovenfor at YES_NO_CANCEL_OPTION er default for de metoder hvor parameteren ikke optræder. Hvis man bruger YES_NO_OPTION er der naturligvis ikke nogen cancel-knap: |
Figur 7:
Uden cancel-knap |
|
|
3. InputDialog |
|
Med metoden: |
|
String JOptionPane.showInputDialog( Component parent, Object message ) |
|
kan man modtage et indtastet input fra brugeren. |
|
F.eks. giver følgende kald |
Source 3: |
JOptionPane.showInputDialog( null, "Indtast Input" );
|
|
denne dialogbox: |
Figur 8:
Simpel InputDialog |
|
|
Brugerens input returneres som en tekststreng. Hvis brugeren valgte cancel-knappen returneres null. |
|
Der er en anden metode: |
|
String JOptionPane.showInputDialog( Component parent, Object message,
String title, int messageType ) |
|
som er fuldstændig analog til den tilsvarende for de to forrige slags dialogboxe. |
|
Der er en tredie metode: |
|
String JOptionPane.showInputDialog( Object message ) |
|
man kan anvende, hvis man ikke ønsker at have et parent-komponent. Da man altid kan anfør null, er det lidt uklart hvad der er formålet med denne metode. |
|
Til gengæld er den fjerde og sidste metode ganske anderledes end hvad vi hidtil har set: |
|
Object JOptionPane.showInputDialog( Component parent, Object message,
String title, int messageType,
Icon icon, Object[] options, Object initoption ) |
|
Her er der tre ekstra parametre. Den første er et icon, og er analogt til det vi tidligere har set. Derimod er de to sidste parametre anderledes. |
|
Disse parametre bruges til at liste en række muligheder, hvoraf man ønsker brugeren skal vælge én. Den sidste af parametrene bruges til at udpege den, som er default. Konkret laves det med en Combobox som det ses af følgende anvendelse: |
Source 4: |
String[] sList = { "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag",
"Lørdag", "Søndag" };
Object obj = JOptionPane.showInputDialog( null, "Vælg ugedag", "InputDialog",
JOptionPane.QUESTION_MESSAGE, null,
sList, sList[0] );
|
|
Hvor vi har valgt at sætte icon til null, hvorved det er messageType, som leverer iconet. |
|
Man bemærker også, at metoden returnerer det Object som brugeren valgte. Hvis brugeren ikke foretager et valg (f.eks. vælger cancel-kanppen) returneres null. |
|
Det giver følgende dialogbox: |
Figur 9:
JCombobox i InputDialog |
|
|
Som det ses, kniber det med at få plads til en Combobox i den lille dialogbox, men den er der. |
|
4. OptionDialog |
|
I modsætning til de dialogboxe vi hidtil har set er en OptionDialog modal (dvs. den tillader ikke andre vinduer at være aktive). |
|
OptionDialog er en sammenfletning af de andre tre dialogboxe. Der er kun en metode til at vise en OptionDialog, og man ser tydeligt af parameterlisten, at den har det hele! |
|
int JOptionPane.showOptionDialog( Component parent, Object message,
String title, int optionType,
int messageType, Icon icon,
Object[] options, Object initOption ) |
|
Når den skal samle alle mulighederne i en metode, har den dog et problem: Hvad skal den returnere - int eller Object? |
|
Den returnerer index for det valgte, og på den måde er den inkonsistent med den InputDialog, som også tager en række objecter, der skal vælges imellem. |
|
Der er dog en ny vinkel i en OptionDialog: Mulighederne opstilles som knapper og ikke i en Combobox. |
|
F.eks. giver dette: |
Source 5: |
String[] sList = { "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag",
"Lørdag", "Søndag" };
int i = JOptionPane.showOptionDialog( null, "Vælg ugedag", "InputDialog",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null,
sList, sList[0] );
|
|
følgende dialogbox: |
Figur 10:
Ugedagene i en Option-Dialog |
|
|
Med mange valgmuligheder bliver dialogboxen naturligvis uhensigtsmæssig bred. |
|
Det er også lidt irriterende, at der ikke findes en NONE_OPTION, men at man i stedet skal anføre en værdi for optionType, som ikke bruges i dette eksempel. |
|
|
Centrering |
Vi har i dette kapitel konsekvent ignoreret den parameter der hedder parent. parent er en reference til det komponent som dialogboxen er tilknyttet. Den eneste funktionalitet jeg har kunnet finde i denne sammenhæng er, at en dialogbox vil centrere sig i forhold til det komponent den er tilknyttet. Det vil ofte være en frame, men kan som nævnt være ethvert grafisk komponent. I eksemplerne er anvendt værdien null. Den bevirker at dialogboxen centreres på skærmen. |