Vergleich und Unterschied zwischen JFrame und JDialog in Java
Hallo Leute, bei unserem letzten Thema haben wir
die Einführung mit der Programmierung der Grafischen Benutzeroberflächen in
Java und die ersten Erfahrungen der JFrame gemacht. Dies könnt ihr euch
natürlich, für diejenigen die es verspasst haben, >>HIER<<
anschauen.
Heute möchte ich mit euch weitere Methoden über den
JFrame, JDialog und ein kleines Vergleich zwischen diese beiden Funktionen
stellen.
Folgende Funktionen zur Erstellen eines Frames
steht dem Java-Developer zur Verfügung:
setSize(x, y)
Mit der Methode setSize() wird die Größe eines
Frames in x-y-Richtung bestimmt. Dabei ist der Ursprung die Obere linke Ecke
des Displays mit den Koordinaten O = ( 0 / 0 ) mit x = 0 und y = 0. Der
dazugehörige Maßstab ist in Pixel. 1 = 1Pixel.
setLocation(x, y)
Mit dieser Methode wird die Position des Fensters
angegeben in dem sich das Fenster beim starten des Programms befinden soll.
Dabei ist die x-y-Koordinaten die Entfernung vom Ursprung zu der Obere linke
Ecke des Fensters.
setBounds(x, y,
width, height)
Mit der Methode setBounds() erreichen wir den
Aufruf der beiden Methoden setSize() und setLocation() gleichzeitig was uns die
Schreibarbeit spart.
Bei unserem letzten Beispiel haben wir ebenfalls
das Schließen von Fenster behandelt in dem wir es steuern können, ob das
Programm nach dem Schließen des Fensters Beendet werden soll, also vom Speicher
gelöscht werden soll, oder ob das Programm im Hintergrund weiter ausgeführt
werden soll. Um diesen Vorgang zu kontrollieren, bietet uns Java die Methode
setDefaultCloseOperation(), was ich auch bei unserem Einführung zu den GUIs
erörtert habe. Ich habe jedoch nicht alle Funktionen dieser Methode mit euch
besprochen nur den EXIT_ON_CLOSE und die Standarteinstellung HIDE_ON_CLOSE.
Dabei gibt es noch zwei weitere, die ebenfalls wichtig sind wie die beiden
selber. Es handelt sich nämlich um das sogenannte DO_NOTHING_ON_CLOSE und
DISPOSE_ON_CLOSE.
Nochmals möchte ich für den Quereinsteiger die
Begriffe samt der, welches wir letztes mal besprochen haben, erörtern.
JFrame.HIDE_ON_CLOSE: Macht den Frame unsichtbar
sobald diese Geschlossen wird aber das Programm läuft im Hintergrund weiter.
Als Beispiel können wir den Instant Messenger Client Skype nehmen. Sobald Sie Skype
heruntergeladen haben und dieses gestartet haben, können sie ja schreiben,
telefonieren und auch Videotelefonie durchführen. Wenn sie aber fertig sind,
dass schließen sie das Fenster. Sie möchten ja nicht, dass unten in der Symbolleiste
Programme laufen, die sie nicht brauchen. In der Wirklichkeit schließen sie
jedoch nur das Fenster und nicht das Programm. Das Programm läuft im
Hintergrund immer weiter bis wir es selber Beenden oder den Computer
Herunterfahren. Genau da kommt das Befehl
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE) ins Spiel. Im Quellcode von
Skype wurde nämlich dieses Befehl vermerkt. Schließe nur das Fenster aber
beende das Programm nicht.
JFrame.DO_NOTHING_ON_CLOSE:
Das Fenster wurde für Anwendungen geeignet, die nur
dann kommen, sobald diese laufen um dies dem Benutzer mitzuteilen.
Beispielsweise starten wir ein Installationsprogramm welches ein Programm in
unserem Computer installieren soll. Wir können dieses Fenster bei der
Installationsvorgang nicht beenden. Erst nach dem dieses Vorgang abgeschlossen
ist, schließt dieses sich selber. Natürlich gibt es in der Wirklichkeit
Betrüger, die sich dieses Wissen für Betrügerische Zwecke benutzen in dem Sie
eine Anwendung starten bei denen dieses Befehl markiert ist. Wir Surfen im
Internet und auf einmal erscheint ein Fenster mit einer Betrügerischen Meldung,
dass Unserer Rechner infiziert ist und wir diese Nummer anrufen sollen.
Mindestens einmal im Leben kam jeder zu dieser Situation. Natürlich will jeder
dieses Fenster schließen. Doch was nun? Es geht nicht, weil das Befehl JFrame.DO_NOTHING_ON_CLOSE
was auf Deutsch „mach nichts wenn der Benutzer schließen will“ bedeutet.
JFrame.EXIT_ON_CLOSE:
Das Fenster sowie das Programm wird nach dem
Schließvorgang komplett beendet und vom Speicher gelöscht.
JFrame.DISPOSE_ON_CLOSE:
Dieses zerstört den Frame wenn dieses auch der letzte
Frame der Anwendung war und beendet die VM (Virtual Machine) danach.
Zu den weiteren Funktionen eines Frames gehören
auch natürlich die sogenannten Icons. Alle Software haben ihr eigenen Icon. In
der Praxis gibt es also keine Software oder Anwendungen, die kein Icon haben.
Um das Icon unserer Anwendung zu setzen, müssen wir einfach die Methode
setIconimage(Image image) aufrufen.
Beispielsweise würde ein einfaches Frame mit einem
Icon wie folgt aussehen:
public class FensterMitIcon {
public static void main(String[] args) {
JFrame f = new JFrame():
f.setTitle("Fenster");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBounds(100,
100, 500, 500);
ImageIcon i = new ImageIcon("Hier den Pfad des Bilds angeben.jpg oder .png");
// Java
akzeptiert alle Bildformate
f.setIconImage(i.getImage());
f.setVisible(true);
}
}
Hintergrundfarbe
eines Fensters:
Bis
jetzt haben wir Fenster entwickelt mit nur weißen Hintergrundfarbe. Dabei ist
nur weiße Hintergrundfarben meistens langweilig. Daher bietet uns Java und andere
Programmiersprachen eine Funktion, mit dem wir die Hintergrundfarbe auswählen
können. In Java
lautet diese Methode JFrame.getContentPane.setBackground(Color c).
JFrame
myFrame = new JFrame();
myFrame.getContentPane().setBackground(Color.BLUE);
Die
Angabe der Farben müssen wir immer in Großbuchstaben schreiben wie z.B. RED,
WHITE, BLACK, YELLOW, MAGENTA, GREEN etc..
Das
sind die Grundlegenden Funktionen/Methoden eines Frames, welches wir immer brauchen
werden. Im Verlauf werden wir daher immer neue Funktionen lernen.
Dialoge
zwischen dem Programm und dem Benutzer mit JDialog:
Dialoge
unterscheiden sich von normalen Frames im Grunde nur dadurch, dass das
Hauptfenster eines Programmes deaktiviert ist, solange der Dialog offen ist.
Konkret
heißt das, dass der Code nach der Zeile setVisible(true)
nicht weiter ausgeführt wird, bis der JDialog geschlossen wird. Außerdem werden
Dialoge nicht in der Taskleiste angeteigt. Ein Dialog wird in Java durch die
Klasse JDialog im Paket javax.swing repräsentiert. Der Standartkonstruktor von
JDialog lautet JDialog(). Dann verhält er sich wie ein JFrame, nur das er nicht
in der Taskleiste erscheint.
Die
weiteren Konstruktoren sind:
JDialog(JFrame
owner):
Owner
bezeichnet den Frame, aus dem der Dialog ausgerufen wird. Unter anderem bewirkt
das, dass der Dialog genau dem übergebenen Fenster erscheint.
JDialog(JFrame owner, String title):
Setzt
zusätlich den Titel des Dialoges.
JDialog(JFrame
owner, String title, boolean model):
Setzt
auch die Modalität des Dialoges.
Es
gibt noch mehr von diesen Konstruktoren, die sich allerdings nur dadurch von
den hier aufgelisteten unterscheiden, in dem sie keinen JFrame als besitzer
annehmen. Sondern entweder einen anderen JDialog, oder ein Window. Dies sind
die Mutterklassen aller Fensterklassen von Swing und AWT.
Wenn
ihr kein Besitzer angeben wollt oder die anderen beiden Eigenschaften aber über
den Konstruktor setzen wollt, müssen wir uns mit einem Trick weiterhelfen.
Naheliegend wäre in diesem Fall, einfach den Konstruktor mit JDialog(null, “DIALOG“, true)
aufzurufen.
Dies
wird aber Fehler melden, weil der Compiler in diesem Fall nicht weis, welchen
Konstruktor wir in Wirklichkeit meinen. Es kommen ja in diesem Beispiel drei
infrage. Deshalb müssen wir dem Compiler es sagen, welches wir meinen und
welches er aufrufen soll. Dazu wandeln wir dieses null einfach in ein JFrame,
JDialog oder JWindow um.
Hier
noch ein Beispiel für das Darstellen eines Dialoges ohne Besitzer-Fenster. Alle
beiden Beispiele wurden auf GitHub hochgeladen. Ihr könnt es
>>HIER<< Runterladen.
package
java2enterprise;
import
javax.swing.JDialog;
public
class main{
public static
void main(String[]
args) {
JDialog
d = new JDialog((JFrame)null, "Mein
Dialog",
true);
d.setBounds(100, 100, 300, 300);
d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
d.setVisible(true);
System.out.println("Dialog
geschlossen");
}
}
Kommentare
Kommentar veröffentlichen