Standard dialogboxe
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 Message­Dialog
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 Input­Dialog
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.