Advanced   Java   Services
Frame
Back Next Up Home

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
ReturntypName 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.


Verschiedene Fensteransätze (Ein Fenster auf dem Bildschirm anzeigen)

1)

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.

borderlayout.jpg

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.

top Back Next Up Home