Advanced
Java
Services
|
Frame |
Frame ist das TopLevelFenster für Java-AWT-Applikationen. Frame ist der einzige unabhängige
top-level-Container in der AWT-Hierarchie. Dagegen sind Window und
Dialog abhängige TLC, da sie selbst wieder einen anderen TLC brauchen,
aus dem heraus sie erzeugt werden. Hier wieder ein Auszug aus den Methoden, geordnet nach Themen.
Konstruktoren | |
Frame() | Constructs a new instance of Frame that is initially invisible. |
Frame(String title) | Constructs a new, initially invisible Frame object with the specified title. |
Wichtige Methoden | |
Returntyp | Name der Methode |
Konfigurierung des Titelbalkens | |
---|---|
String | getTitle() Gets the title of the frame. |
void | setTitle(String title) Sets the title for this frame to the specified string. |
Image | getIconImage() Gets the image to be displayed in the minimized icon for this frame. |
void | setIconImage(Image image) Sets the image to be displayed in the minimized icon for this frame. |
Aussehen, Zustand | |
int | getExtendedState() Gets the state of this frame. |
void | setExtendedState(int state) Sets the state of this frame. |
void | setResizable(boolean resizable) Sets whether this frame is resizable by the user. |
boolean | isResizable() Indicates whether this frame is resizable by the user. |
void | setUndecorated(boolean undecorated) Disables or enables decorations for this frame. |
boolean | isUndecorated() Indicates whether this frame is undecorated. |
Rectangle | getMaximizedBounds() Gets maximized bounds for this frame. |
void | setMaximizedBounds(Rectangle bounds) Sets the maximized bounds for this frame. |
MenuBar | |
MenuBar | getMenuBar() Gets the menu bar for this frame. |
void | setMenuBar(MenuBar mb) Sets the menu bar for this frame to the specified menu bar. |
void | remove(MenuComponent m) Removes the specified menu bar from this frame. |
statische Methoden | |
static Frame[] | getFrames() Returns an array containing all Frames created by the application. |
import java.awt.*; public class FirstWindow { public static void main(String[] args) { Frame f = new Frame("FirstWindow") ; f.setVisible(true); } }
Frame wird in main() definiert. Nicht sehr professionell, aber es funktioniert.
2)
import java.awt.*;
public class SecondWindow
{
public SecondWindow()
{
Frame f = new Frame("FirstWindow") ;
f.setVisible(true);
}
public static void main(String[] args)
{
SecondWindow sw = new SecondWindow() ;
}
}
Schon besser. Frame wird im Konstruktor definiert. Objekt der Hauptklasse wird angelegt mit
Defaultkonstruktor. Nachteil: Frame ist nur im Konstruktor bekannt.
3)
import java.awt.*;
public class ThirdWindow
{
private Frame f = new Frame("ThirdWindow") ;
public ThirdWindow()
{
initFrame();
}
private void initFrame()
{
f.setSize(300,200);
f.setLocation(100,100);
f.setBackground(Color.green);
f.setVisible(true);
}
public static void main(String[] args)
{
ThirdWindow tw = new ThirdWindow() ;
}
}
Es wird langsam. Frame ist private Member geworden. Initialisierung ist in eine eigene Methode
verlegt worden, die im Konstruktor aufgerufen wird. Ein guter "has a" Ansatz, ausbaufähig.
4)
import java.awt.*;
public class FourthWindow extends Frame
{
public FourthWindow()
{
initFrame();
}
private void initFrame()
{
setSize(300,200);
setLocation(100,100);
setBackground(Color.green);
setVisible(true);
}
public static void main(String[] args)
{
FourthWindow fw = new FourthWindow() ;
}
}
Der "is a"-Ansatz. Hauptklasse ist selbst ein Fenster. Kein Deklaration eines Frame-Objekts mehr
notwendig. In der Regel der bevorzugte Ansatz. Wenn man main() noch auslagert, hat man eine eigene
Fensterklasse entwickelt.
Das Schließen eines Frames mit dem WindowCloser
Die Klasse WindowCloser bietet eine statische Methode close() an, der man das zu schließende
Fensterobjekt übergibt. Es ist dabei egal, welchen der obigen Ansätze man verwendet. Der kürze halber
nehmen wir hier den ersten Ansatz.
import java.awt.*;
public class FirstWindow
{
public static void main(String[] args)
{
Frame f = new Frame("FirstWindow") ;
WindowCloser.close(f);
f.setVisible(true);
}
}
Aufnehmen von Komponenten und Layout
Das Defaultlayout für Frame wird von Window übernommen und ist daher BorderLayout.
Einzelheiten, wie man Komponenten in einen Container aufnimmt, der ein BorderLayout hat, findet man im
Kapitel Layout unter BorderLayout.
BorderLayout teilt den Frame in fünf Regionen ein, von denen nicht alle benützt werden müssen.
Das Aufnehmen von Komponenten in die einzelnen Regionen erfolgt nach dem folgenden Schema:
frame.add(komponente, BorderLayout.NORTH) ;
frame.add(komponente, BorderLayout.CENTER) ;
// usw.
Eventhandling
Frame erbt alle Methoden zum Thema Eventhandling von seinen Vorgängern. Wie man dieses einsetzt,
findet sich in einem eigenen Kapitel über Eventhandling.
Fokushandling
Die Version 1.4 hat die Klasse Frame um eine ganze Reihe von neuen Methoden bereichert,
u.a. wurde die ganze Fokusbehandlung neu strukturiert. Eine Auflistung der neu hinzugekommenen
Methoden findet sich unter
New 1.4 methods in Component and its subclasses (Summary).
Auf das neue Fokusmanagement wird eingegangen in
Neues 1.4 FokusManagement.