Eine Dialogbox stellt ein weiteres Element dar, das weitere graphische Elemente beinhalten kann. Wie ein Frame, so ist eine Dialogbax ein eigenständiges Fenster, das jedoch keine Menübar besitzen kann. So ist eine Dialogbox zwischen einem Frame und einem Panel anzusiedeln. Eine Dialogbax wird, wie derName schon sagt, dazu benutzt, um temporäre Dialogfenster aufzubauen. Das folgende Beispiel zeigt, wie es gemacht wird:
/* Example dialog.c */ : dialog = j_dialog(frame,"Dialog Demo"); label = j_label(dialog,"Hello World"); close = j_button(dialog,"Close"); j_pack(dialog); while(1) { : if(obj==open) { /* in der Mitte von Frame placieren */ j_getpos(frame,&x,&y); x += j_getwidth(frame)/2 - j_getwidth(dialog)/2 ; y += j_getheight(frame)/2 - j_getheight(dialog)/2; j_setpos(dialog,x,y); j_show(dialog); } if((obj==close) || (obj == dialog)) j_hide(dialog); : }
Zunächst wird ein Dialogfenster erzeugt:
dialog = j_dialog(frame,"Dialog Demo");
Die Funktion erwartet eine Überschrift, die im Rahmen der Dialogbox eingeblendet wird, sowie das übergeordnetes Fenster, dem die Dialogbox zugeordnet wird. In diese Dialogbox wird nun im Beispiel ein Label zur Aufnahme einer Nachricht, sowie ein Closebutton eingefügt. Die nächste Funktion:
j_pack(dialog);
weist den Layoutmanager des Dialogfeldes an, die Elemente so platzspared wie möglich anzuordnen2.4.
Über den Befehl:
j_show(dialog);
wird die Dialogbox sichtbar, was nicht weiter verwundert. Da die Positionierung einer Dialogbox in absoluten Bildschirmkoordinaten erfolgt, wird zunächst die Position des Frames ermittelt, und aus der Hoehe und Breite beider Fenster eine, zur Frame mittige Psosition errechnet:
j_getpos(frame,&x,&y); j_setpos(dialog,x,y);
Eine Dialogbox sendet, genau wie ein Frame, einen Event, sobald das Closeicon im Rahmen der Dialogbax angeklickt wurde. Somit sorgt die Abfrage nach dem Closebutton und dem Closeicon für ein Verschwinden der Dialogbox:
if((obj==close) || (obj == dialog)) j_hide(dialog);
Während die Dialogbox zu sehen ist, kann weiterhin die Menuzeile des Hauptfensters bedient werden. Häufig ist jedoch erwünscht, das eine Dialogbox modal ist, d.h. außer diesem Fenster sollen alle anderen Fenster deaktiviert sein. Dies kann erreicht werden, indem man das Hauptfenster, den Frame, disabled. Wird ein Behälterelement (Frame, Panel, Dialog) disabled, so werden alle in im enthaltenen Elemente deaktiviert. Ein modales Dialogfeld kann somit mit folgender Modifikation erzeugt werden:
|
if(obj==open) { j_disable(frame); : : } if((obj==close) || (obj == dialog)) { j_hide(dialog); j_enable(frame); }
Solange nun das Dialogfenster sichtbar ist, ist der Frame (und alle enthaltenen Elemente) disabled (siehe Abbildung 2.26). Natürlich darf man nicht vergessen, nach dem Schließen des Dialogfeldes den Frame wieder zu aktivieren.