Problem mit JDialog in Netbeans?

Netbeans nimmt einem Java-Programmierer viel Arbeit ab. Gerade die Erstellung von grafischen Benutzeroberflächen (GUIs) geht mit dem eingebauten GUI-Builder Matisse leicht von der Hand.

Das Erstellen einer Dialogbox mit Netbeans entsprechendem JDialog-Template führt leider bei bestehenden Projekten zu Fehlern, die sich aber leicht korrigieren lassen.

Dieses How-To beschreibt, wie man einen JDialog in ein bestehendes Projekt mit einem JFrame einbindet und aufruft. Diese Anleitung richtet sich an Anfänger.

Unterschiede zwischen JDialog und JFrame

Der Hauptunterschied zwischen beiden GUI-Komponenten ist die optionale Eigenschaft modal von JDialog. D.h. das man den Dialog erst beenden muss, bevor man im Programm weiter arbeiten kann.

Sonst unterscheiden sich beide Komponenten für den Java-Programmierer nicht bedeutend. Ein nicht-modal spezifizierter JDialog verhält sich wie ein JFrame. Einzig unter Windows erscheint kein Symbol in der Taskleiste bei einem reinen JDialog Programm.

JDialog anlegen

Ich empfehle jeden JDialog immer in einer neuen eigenen Klasse anzulegen und nicht in eine bestehende, die evtl. ein JFrame enthält,  einzufügen. Das erhöht die Übersichtlichkeit des Codes. Sie sollte sich aber in gleichen Paket befinden, wie die aufrufende Klasse, wenn nichts dagegen spricht.

Dazu kann man Netbeans JDialog-Assistenten benutzen, den man über „File| New…“ unter „Categories | Swing GUI Forms“ und JDialog Form aufruft.

Screenshot Netbeans

Leider erstellt Netbeans bei einer JDialog-Klasse auch immer gleich eine main-Methode. Da aber i.d.R. bei bestehenden Projekten bereits eine main-Methode vorhanden ist, kommt es hier zu Interferenzen. Um dies zu lösen, muss die main-Methode der JDialog-Klasse gelöscht oder zumindest auskommentiert werden.

Netbeans

Besteht ein Programm nur aus der JDialog-Klasse, muss die main-Methode natürlich bestehen bleiben.

Mittels Matisse kann man jetzt den Dialog nach eigenen Wünschen aufbauen.

JDialog aus einer anderen Klasse aufrufen

Den JDialog kann aus einer anderen Klasse wie folgt aufrufen werden, wenn der Name der JDialog-Klasse „NewJDialog“ ist:

NewJDialog dialog = new NewJDialog(this, true); 
dialog.setLocationRelativeTo(this); 
dialog.setVisible(true);

NewJDialog musst du durch den Klassennamen deiner Dialog-Klasse ersetzen. Das übergebene true im Konstruktor der JDialog-Klasse macht den Dialog modal, s.w.o.

Das Aufrufen der Funktion setLocationRelative mit this zentriert den Dialog im aufrufenden JFrame. Das reduziert bei großen Monitoren und nicht maximierten Fenstern die Mauswege. Übergibt man null wird der Dialog in der Monitormitte zentriert.

setVisible ist selbsterklärend.

Vorlage für JDialog Form ändern

Damit man nicht bei jedem neuen JDialog die Main-Methode löschen musst, kann man gleich die Vorlage ändern bzw. eine neue ohne Main-Methode erstellen.

Im Menü „Tools | Templates“ öffnet man unter Templates die „Swing GUI Forms“ Gruppe. Dort wählt man „JDialog Form“ und klickt rechts auf „Duplicate“:

Netbeans - Tpl duplicate

Dann vergibt man einen neuen beliebigen Vorlage- und Dateinamen:

Netbeans - Tpl new name

Zuletzt öffnet man die neue Vorlage im Editor, …

Netbeans - Tpl open editor

… löscht die Main-Methode, wie oben beschrieben und speichert.

Damit steht die neue Vorlage dann bei „File | New File … | Swing GUI Forms“ zur Verfügung.

Zusammenfassung

Wenn man bei bestehenden Projekten die main-Methode aus der von Netbeans erzeugten JDialog-Klasse entfernt, verschwinden die Fehler. Leider kann man die Erzeugung von public static void main() bei JDialog nicht unterdrücken (Stand: Netbeans 7).

Der Aufruf von JDialog erfolgt standardgemäß durch den Konstruktor.

Bildnachweis

Netbeans Screenshot: Public Domain (CC0)


3 Kommentare

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert