14.2 Fenster unter grafischen Oberflächen![down](common/down.gif) ![top](common/15x15leer.gif)
Der Anfang aller Programme unter einer grafischen Benutzeroberfläche ist das Fenster (engl. frame). Wir müssen uns daher erst mit den Fenstern beschäftigen, bevor wir auf den Inhalt näher eingehen können. Das Fenster dient auch als Grundlage von Dialogen, speziellen Fenstern, die entweder modal oder nicht modal arbeiten können. Wobei ein modaler Dialog erst bedient werden möchte, bis es mit dem Gesamtsystem weitergehen kann.
14.2.1 Fenster öffnen![down](common/down.gif) ![top](common/top.gif)
Damit wir unter Java ein Fenster öffnen können, müssen wir zunächst einmal das awt-Paket mit einbinden. Dann können wir eine Klasse Frame und deren Methoden nutzen. Das Listing ist sehr kurz.
Listing 14.1 HelloFrame.java
import java.awt.Frame;
public class HelloFrame
{
public static void main( String args[] )
{
Frame f = new Frame( "Das Fenster zur Welt" );
f.setSize( 300, 200 );
f.setVisible( true );
}
}
Das Fenster kann nicht mit X in der Titelleiste geschlossen werden, da wir noch keine Ereignisbehandlung implementiert haben.
Mehr zur Klasse Frame
Neben dem Standard-Konstruktor existiert ein weiterer, bei dem wir den Namen in der Titelleiste bestimmen können, wie im Beispiel geschehen.
class java.awt.Frame
extends Window
implements MenuContainer
|
![gp](common/gp.gif) |
Frame()
Erzeugt ein neues Frame-Objekt, welches am Anfang unsichtbar ist. |
![gp](common/gp.gif) |
Frame( String title )
Erzeugt ein neues Frame-Objekt mit einem Fenster-Titel, welches am Anfang unsichtbar ist. |
![gp](common/gp.gif) |
void setTitle( String title )
Setzt den Titel des Fensters außerhalb des Konstruktors. |
![Abbildung](bilderklein/klein14helloframe.gif) Hier klicken, um das Bild zu Vergrößern
Abbildung 14.1 Das erste Fenster
Nach der Konstruktion ist das Fenster vorbereitet, aber noch nicht sichtbar. Es wird erst sichtbar, wenn wir die Funktion setVisible(true) aufrufen. Alternativ funktioniert auch show(). Da sich die Frame-Klasse direkt von Window ableitet - ein Frame ist ein Window mit Titelleiste -, besitzt Frame keine eigene setVisible()-Funktion, sondern erbt sie von Component, wovon indirekt auch Window wieder abgeleitet ist.
class java.awt.Window
extends Container
|
![gp](common/gp.gif) |
boolean isShowing()
true, wenn sich das Fenster auf dem Bildschirm befindet. |
![gp](common/gp.gif) |
void toBack()
Das Fenster wird als hinterstes in die Fensterreihenfolge eingereiht. Ein anderes Fenster wird somit sichtbar. |
![gp](common/gp.gif) |
void toFront()
Platziert das Fenster als vorderstes in der Darstellung aller Fenster auf dem Schirm. |
class java.awt.Component
implements ImageObserver, MenuContainer, Serializable
|
![gp](common/gp.gif) |
void setVisible( boolean b )
setVisible(true) zeigt das Fenster an. Liegt es im Hintergrund, so wird es wieder in den Vordergrund geholt. Früher wurde die Methode show() verwendet. |
Hauptprogramm von Frame ableiten
Wir können unsere neue Klasse auch direkt von Frame ableiten. Dann ist es uns gestattet, auf die Funktionen der Klasse Frame direkt zuzugreifen, zum Beispiel auf setSize(). Im Hauptprogramm erzeugen wir über den Konstruktor dann das Fenster. Der Konstruktor ruft über die super()-Funktion den Konstruktor von Frame auf (da wir Frame ja einfach beerben). In den nachfolgenden Programmen werden wir immer diese Methode verwenden.
Listing 14.2 SinWin.java
import java.awt.Frame;
public class SinWin extends Frame
{
public SinWin( int x, int y )
{
super( "Hallo" );
setSize( x, y );
}
public static void main( String args[] )
{
SinWin win1 = new SinWin( 100, 200 );
win1.show();
SinWin win2 = new SinWin( 300, 300 );
win2.show();
}
}
Nachdem im Konstruktor das Fenster erzeugt wurde, ändern wir die Größe. Im Hauptprogramm erzeugen wir zwei Fenster win1 und win2, die beide Exemplare der eigenen Klasse sind. Die show()-Methode ist natürlich an ein Objekt gebunden.
14.2.2 Größe und Position des Fensters verändern![down](common/down.gif) ![top](common/top.gif)
Mit der aus Component geerbten Methode setSize() können wir die Maße des Fensters verändern.
class java.awt.Component
implements ImageObserver, MenuContainer, Serializable
|
![gp](common/gp.gif) |
void setSize( int width, int height )
Verändert die Größe einer Komponente; ehemals size(). |
![gp](common/gp.gif) |
void setSize( Dimension d )
Verändert die Größe einer Komponente; entspricht setSize(d.width, d.height). |
Beispiel Die Position des Fensters f kann mit setLocation() geändert werden. Wer das Fenster zum Beispiel in der Mitte des Bildschirms positionieren möchte, muss nur vorher die Größe des Bildschirms erfragen. Dies funktioniert mit getScreenSize(), einer Funktion des Toolkits.
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
f.setLocation( (d.width - getSize().width ) / 2,
(d.height- getSize().height) / 2 );
|
class java.awt.Component
implements ImageObserver, MenuContainer, Serializable
|
![gp](common/gp.gif) |
void setLocation( int x, int y )
Setzt die Komponente an die Position x, y; ehemals move(). |
![gp](common/gp.gif) |
void setLocation( Point p )
Setzt die Komponente an die gewünschte Position. |
![gp](common/gp.gif) |
Point getLocation()
Liefert die Position der Komponente als Point-Objekt. |
Beispiel Auch das Vergrößern eines Fensters f, so dass es die maximale Ausdehnung annimmt, ist mit einer Funktion möglich. Betrachten wir die folgenden Zeilen, die hinter eine setVisible(true)-Methode zum Beispiel im Konstruktor gesetzt werden:
f.setLocation( 0, 0 );
f.resize( Toolkit.getDefaultToolkit().getScreenSize() );
Soll der Frame nicht in der Größe veränderbar sein, so setzen wir einfach setResizable(false).
Frame frame = new Frame( "Du kriegst mich nicht klein." );
frame.setResizable( false );
|
14.2.3 Fenster- und Dialog-Dekoration![top](common/15x15leer.gif) ![top](common/top.gif)
Für bestimmte Anwendungen ist es günstig, bei Fenstern und Dialogen die Standarddialogelemente auszuschalten, etwa dann, wenn der Benutzer das Fenster nicht verkleinern soll. Seit dem SDK 1.4 haben die Entwickler den Klassen Frame und Dialog eine Methode setUndecorated() mitgegeben, über die sich die Titelleiste, das Systemmenü und der Rahmen abschalten lassen. Da Swing auf den AWT-Komponenten basiert, gilt das auch für Swing-Fenster und Dialoge.
class java.awt.Frame extends Window implements MenuContainer
class java.awt.Dialog extends Window
|
![gp](common/gp.gif) |
void setUndecorated( boolean undecorated )
Setzt/löscht die Dekoration. |
![gp](common/gp.gif) |
boolean isUndecorated()
Erfragt die Dekoration. |
|