Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 

22.1 Rahmenprogramm



Nachdem in Kapitel 21 die grundsätzliche Vorgehensweise beim Anlegen eines Dialogs besprochen wurde, behandelt dieses Kapitel nun die verschiedenen Dialogelemente. Zu jedem Dialogelement werden die Konstruktoren und die verschiedenen Methoden zur Steuerung seines Verhaltens vorgestellt. Falls ein Dialogelement auch Nachrichten sendet, werden diese erläutert und ihre Anwendung demonstriert.

Jedes Dialogelement wird in Java durch eine eigene Klasse repräsentiert, die dessen Verhalten und Eigenschaften kapselt. Zur Aufnahme eines neuen Dialogelements in einen Dialog wird eine neue Instanz der gewünschten Klasse angelegt und das resultierende Objekt mit add in den Dialog eingefügt. Die Methoden des Dialogelements können dann zu einem beliebigen Zeitpunkt aufgerufen werden, um dessen Verhalten zu beeinflussen. Alle Dialogelemente sind aus der Klasse Component abgeleitet. Sie verfügen über die grundlegenden Eigenschaften eines Fensters, besitzen eine Größe und Position und sind in der Lage, Nachrichten zu empfangen und zu bearbeiten.

Damit nicht jedesmal ein komplettes Programm abgedruckt werden muß, wollen wir die Beispiele in ein vordefiniertes Rahmen-Programm einbetten. Dieses erzeugt ein Fenster mit zwei Buttons, die zum Aufrufen des Dialogs bzw. zum Beenden des Programms verwendet werden können:

 Hinweis 

Abbildung 22.1: Das Beispielprogramm zum Aufruf der Beispieldialoge

Der nach Drücken des »Dialog«-Buttons aufgerufene Dialog besitzt ein BorderLayout, das in der South-Komponente einen Button zum Beenden des Dialogs enthält. In der Center-Komponente wird ein Panel plaziert, das an die Methode customizeLayout weitergegeben wird, die darin die Beispielkomponenten plaziert. In der Basisversion ist diese Methode leer, und der Dialog hat folgendes Aussehen:

Abbildung 22.2: Der noch leere Beispieldialog

Die Beispielprogramme können dann dem übergebenen Panel innerhalb von customizeLayout einen beliebigen Layoutmanager zuordnen und eine beliebige Auswahl von Komponenten darauf plazieren. Der Ende-Button bleibt auf jeden Fall erhalten und kann zum Beenden des Dialogs verwendet werden:

001 /* DialogBeispiel.java */
002 
003 import java.awt.*;
004 import java.awt.event.*;
005 
006 class MyDialog
007 extends Dialog
008 implements ActionListener
009 {
010    public MyDialog(Frame parent)
011    {
012       super(parent,"MyDialog",true);
013       Point parloc = parent.getLocation();
014       setBounds(parloc.x + 30, parloc.y + 30,400,300);
015       setBackground(Color.lightGray);
016       setLayout(new BorderLayout());
017       //Panel
018       Panel panel = new Panel();
019       customizeLayout(panel);
020       add("Center",panel);
021       //Ende-Button
022       Button button = new Button("Ende");
023       button.addActionListener(this);
024       add("South", button);
025       //Window-Listener
026       addWindowListener(
027          new WindowAdapter() {
028             public void windowClosing(WindowEvent event)
029             {
030                endDialog();
031             }
032          }
033       );
034       pack();
035    }
036 
037    private void customizeLayout(Panel panel)
038    {
039       //Beispielcode hier
040    }
041 
042    public void actionPerformed(ActionEvent event)
043    {
044       if (event.getActionCommand().equals("Ende")) {
045          endDialog();
046       }
047    }
048 
049    void endDialog()
050    {
051       setVisible(false);
052       dispose();
053       ((Window)getParent()).toFront();
054       getParent().requestFocus();
055    }
056 }
057 
058 public class DialogBeispiel
059 extends Frame
060 implements ActionListener
061 {
062    public static void main(String[] args)
063    {
064       DialogBeispiel wnd = new DialogBeispiel();
065       wnd.setSize(300,200);
066       wnd.setVisible(true);
067    }
068 
069    public DialogBeispiel()
070    {
071       super("DialogBeispiel");
072       setBackground(Color.lightGray);
073       setLayout(new FlowLayout());
074       //Dialog-Button
075       Button button = new Button("Dialog");
076       button.addActionListener(this);
077       add(button);
078       //Ende-Button
079       button = new Button("Ende");
080       button.addActionListener(this);
081       add(button);
082       //Window-Listener
083       addWindowListener(
084          new WindowAdapter() {
085             public void windowClosing(WindowEvent event)
086             {
087                setVisible(false);
088                dispose();
089                System.exit(0);
090             }
091          }
092       );
093    }
094 
095    public void actionPerformed(ActionEvent event)
096    {
097       String cmd = event.getActionCommand();
098       if (cmd.equals("Dialog")) {
099          MyDialog dlg = new MyDialog(this);
100          dlg.setVisible(true);
101       } else if (cmd.equals("Ende")) {
102          setVisible(false);
103          dispose();
104          System.exit(0);
105       }
106    }
107 }
DialogBeispiel.java
Listing 22.1: Rahmenprogramm für Dialogelemente


 Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 
Go To Java 2, Addison Wesley, Version 1.0.2, © 1999 Guido Krüger, http://www.gkrueger.com