41
DVG3 - Paint 1 Paint ein Zeichenprogramm

1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

Embed Size (px)

Citation preview

Page 1: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DVG3 - Paint 1

Paint

ein Zeichenprogramm

Page 2: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

2

Paint – ein Zeichenprogramm

Page 3: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

3

AWT - ImplementierungAWT bietet einheitliche Schnittstelle zu der graphischen Oberfläche auf dem genutzten Rechner. Z.B.:

Windows auf Windows 95/98 und Windows NT

Motif, CDE, fvwm u.s.w. auf UNIX-basierten Rechnern

Vorteile:

einheitliche Programmierschnittstelle

Look & Feel der graphischen Oberfläche entsteht automatisch

Nachteil:

Die JVM hat keine Kontrolle über die eigentliche Darstellung.

AWT kann nur realisieren, was in allen graphischen Oberflächen möglich ist.

Page 4: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

4

AWT - Schichtenmodell

Java AWT-Objekt

Peer-Interface

Peer-Implementation

Motif

X11

Peer-Implementation

Win-API

Windows

Page 5: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

5

Das Zeichenfenster

Page 6: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

6

Öffnen eines FenstersKlasse Framejava.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame KonstruktorFrame()Frame(String title)Größe und Position festlegensetBounds (int x, int y, int width, int height) (aus Component)sichtbar/unsichtbar machensetVisible (boolean b) (aus Component)Titel ändernsetTitle(String title)Standardfarben definierensetBackground(Color c), setForeground(Color c) (aus Component)Standardfont definierensetFont(Font f) (aus Container)

Page 7: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

7

import java.awt.*;

public class Paint extends Frame

{

public static void main(String[] args)

{

new Paint("Paint");

}

Paint (String title)

{

super(title);

setBounds(0,0,400,400);

setVisible(true);

}

}

Page 8: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

8

Koordinaten im FrameX-Koordinate : von links nach rechts

Y-Koordinate : von oben nach unten

Linke obere Ecke : (0,0)

Rechte untere Ecke :( getBounds().width , getBounds().height )

public Rectangle getBounds() (aus Component)

Rectangle besitzt die Attribute• int x, int y, int width, int height

Zum Zeichenbereich zählen auch die Ränder, der Kopfbereich und der Menübereich

Page 9: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

9

Zeichnen im Framepublic void paint (Graphics g) (aus Container)

standardmäßig ist paint leer und muss überschrieben werden, damit etwas gezeichnet wird

paint ist in Component definiert und damit in allen abgeleiteten Klassen verfügbar

paint wird automatisch aufgerufen, wenn die Graphik aktualisiert werden muss. Z.B.:

Nach Größenänderung des Objektes

Nach wieder sichtbar werden des Objektes

paint kann auch vom Programm direkt oder indirekt (z.B. durch repaint() oder repaintAll()) aufgerufen werden.

paint beginnt immer mit einer leeren Grafik.

Wegen der Implementierung von AWT funktioniert paint aber nicht in allen Klasse gleich gut.

Gut: Frame, Panel, Canvas

Schlecht: Button, Label

Page 10: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

10

...Paint (String title){

super(title);setBounds(0,0,400,400);setVisible(true);

}public void paint (Graphics g){

Rectangle b = getBounds();System.out.println("Bounds = "+b);for (int x=1, y=1, w=b.width-2, h=b.height-2;

x<=51 ; x+=10, y +=10, w-=20, h-=20 ){

g.drawRect( x, y, w, h);}

}}

Page 11: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

11

Hierarchie von AWT-ObjektenContainer können andere AWT-Objekte aufnehmen. Diese können wieder Container sein. Es entsteht eine Hierarchie von AWT-Objekten.

Frame

Panel

Canvas

TextField

Panel

Panel

Checkbox Checkbox CheckboxCheckboxButton ButtonButton

Button ButtonButton

Button ButtonButton

Button ButtonButton

Scrollbar

Scrollbar

Scrollbar

Label Label

Label Label

Page 12: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

12

C h eckb ox

C h eckb ox

C h eckb ox

C h eckb ox

P an e l C an vas TextF ie ld

B u tton

.... ..

B u tton

S c ro llb a r

S c ro llb a r

S c ro llb a r

P an e l

L ab e l

L ab e l

L ab e l

L ab e l

P an e l

F ram e

Page 13: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

13

Container - MethodenHinzufügen einer Komponentepublic Component add (Component comp)

Löschen einer Komponentepublic void remove (Component comp)

Löschen aller Komponentenpublic void removeAll ()

Aktualisieren des Containers nach dem Componenten geändert wurdenpublic void validate ()

Page 14: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

14

Panel einfügen

Panel hat eigene Koordinaten

Links oben: (0,0)

Rechte untere Ecke :( getBounds().width , getBounds().height )

Panel keinen Rahmen

Panel hat eigenen Clip-Bereich

Page 15: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

15

...private GPanel gPanel = new GPanel();Paint (String title){

super(title);setBounds(0,0,400,400);add(gPanel);setVisible(true);

}}class GPanel extends Panel{

public void paint (Graphics g){

Rectangle b = getBounds();System.out.println("Bounds = "+b);for (int x=1, y=1, w=b.width-2, h=b.height-2;

x<=51 ; x+=10, y +=10, w-=20, h-=20 ){

g.drawRect( x, y, w, h);}

}}

Page 16: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

16

Anonyme Klassen

Die Definition der Klasse GPanel ist sehr kurz und einfach.

Es wird nur ein Objekt der Klasse GPanel erzeugt.

Definition der Klasse GPanel steht weit weg von der Nutzung.

Nutzung anonymer Klassen vereinfacht das Programm und macht es übersichtlicher und kompakter.

Anonyme Klassen

Page 17: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

17

import java.awt.*;public class Paint extends Frame{

public static void main(String[] args) { new Paint("Paint"); }private Panel gPanel = new Panel(){public void paint (Graphics g){

Rectangle b = getBounds();System.out.println("Bounds = "+b);for (int x=1, y=1, w=b.width-2, h=b.height-2;x<=51; x+=10, y +=10, w-=20, h-=20 ){

g.drawRect( x, y, w, h);}

} };Paint (String title){

super(title);setBounds(0,0,400,400);add(gPanel);setVisible(true);

}}

Page 18: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

18

Malen in AWTZeichnen einer Freihandkurve

Vorgang:

1. Mouse auf den Anfangspunkt positionieren

2. Linke Mouse-Taste drücken

3. Mouse mit gedrückter Taste bewegen

4. Linke Mouse-Taste loslassen

Diese Vorgänge erzeugen Events.

Events müssen vom Programm behandelt werden.

Events

Page 19: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

19

MouseEventDas Ereignis, das bei der Bewegung der Maus und bei Benutzung der der Maustasten eintritt.

Enthalten im package java.awt.event

Methoden:

public int getClickCount()Anzahl der Tastendrücke ( 2=Doppelklick )

public Point getPoint()(x,y)-Koordinate bei der das Ereignis eingetreten istpublic

public int getX()x-Koordinate bei der das Ereignis eingetreten ist

public int getY()y-Koordinate bei der das Ereignis eingetreten ist

public String paramString()Zeichenkette, die das Ereignis beschreibt

Page 20: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

20

MouseListener, MouseAdapterListener, der auf Ereignisse reagiert, die beim Drücken einer Maustaste und beim Betreten und Verlassen des Objektes durch den Mauszeiger auftreten.MouseListener ist ein Interface.MouseAdapter implementiert alle Methode von MouseListener durch leere Methoden.Enthalten im package java.awt.eventMethoden:

public void mouseClicked(MouseEvent e)wird aufgerufen, wenn die linke Maustaste gedrückt und wieder losgelassen wirdpublic void mouseEntered(MouseEvent e)wird aufgerufen, wenn der Mauszeiger das Objekt betritt public void mouseExited(MouseEvent e)wird aufgerufen, wenn der Mauszeiger das Objekt verlässtpublic void mousePressed(MouseEvent e)wird aufgerufen, wenn die linke Maustaste gedrückt wirdpublic void mouseReleased(MouseEvent e)wird aufgerufen, wenn die linke Maustaste gedrückt war und wieder losgelassen wird

Page 21: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

21

MouseMotionListener, MouseMotionAdapterListener, der auf Ereignisse reagiert, die beim Bewegen der Maus auftreten.

MouseMotionListener ist ein Interface.

MouseMotionAdapter implementiert alle Methode von MouseMotionListener durch leere Methoden.

Enthalten im package java.awt.event

Methoden:

public void mouseDragged(MouseEvent e)wird aufgerufen, wenn die Maus bewegt wird und dabei die linke Maustaste gedrückt ist

public void mouseMoved(MouseEvent e)wird aufgerufen, wenn die Maus bewegt wird ohne dass die linke Maustaste gedrückt ist

Page 22: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

22

import java.awt.*;import java.awt.event.*;public class Paint extends Frame implements

MouseListener, MouseMotionListener{

public static void main(String[] args) { new Paint("Paint"); }

private int x0, y0;private Panel gPanel = new Panel();

Paint (String title){

super(title);setBounds(0,0,400,400);add(gPanel);setVisible(true);gPanel.addMouseListener(this);gPanel.addMouseMotionListener(this);

}

Page 23: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

23

public void mousePressed(MouseEvent e){

x0 = e.getX();y0 = e.getY();

}public void mouseDragged(MouseEvent e){

int x = e.getX();int y = e.getY();gPanel.getGraphics().drawLine(x0,y0,x,y);x0=x;y0=y;

}

public void mouseClicked(MouseEvent e) { }public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }public void mouseReleased(MouseEvent e) { }public void mouseMoved(MouseEvent e) { }

}

Page 24: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

24

LayoutContainer enthalten AWT-Objekte

Wenn mehrere Objekte enthalten sind, stellt sich die Frage der Anordnung der Objekte, des Layouts.

Die Anordnung der Objekte kann mit Hilfe der Layout-Managers beeinflusst werden.

Alle von Container abgeleiteten Klassen erben die Methodepublic void setLayout(LayoutManager mgr)

LayoutManager ist ein Interface man kann prinzipiell eigene LayoutManager entwickeln.

Vom Interface LayoutManager ist das Interface LayoutManager2 abgeleitet. Mit diesem Interface können kompliziertere Layouts realisiert werden.

In AWT sind einige gebräuchliche Layouts realisiert.

Page 25: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

25

Von LayoutManager abgeleitete Layouts

GridLayout

Tabellen-Layout

feste Anzahl von Zeilen und/oder Spalten

Zeilenhöhe und Spaltenbreite gleichmäßig

FlowLayout

fließendes Layout

passt sich der Größe des Fensters an

sortiert die Komponenten automatisch

Page 26: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

26

Von LayoutManager2 abgeleitete LayoutsCardLayout

organisiert mehrere Seiten wie Karteikarten

Spezielle Methoden erlauben das Blättern und Positionieren

BorderLayout

Randkomponenten um eine zentrale Komponente platziert

GridBagLayout

Verallgemeinertes Tabellen-Layout

Zusammenfassung von Zellen

Steuerung der Höhen und Breiten

Page 27: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

27

Kombination von LayoutsZur Beschreibung komplizierterer Layouts können diese kombiniert werden.

Statt einer Komponente wird ein Container platziert. Dieser Container erhält ein eigenes Layout.

GridLayout

BorderLayout

GridBagLayout

Page 28: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

28

Paint-LayoutBorderLayout

File – Operationen

Nachrichten

Zeichenwerkzeuge

Zeichenfläche

Status, Einstellungen

Page 29: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

29

private Label xLabel = new Label(" x = ");private Label yLabel = new Label(" y = ");Paint (String title){ super(title);

setBounds(0,0,400,400);setLayout(new BorderLayout());add(gPanel,BorderLayout.CENTER);gPanel.addMouseListener(this);gPanel.addMouseMotionListener(this);createStatus();setVisible(true);

}private void createStatus(){ Panel statusPanel = new Panel();

statusPanel.setBackground(new Color(240,240,240));statusPanel.setLayout(new GridBagLayout());GridBagConstraints gbc = new GridBagConstraints();gbc.gridwidth=GridBagConstraints.REMAINDER;statusPanel.add(xLabel,gbc);statusPanel.add(yLabel,gbc);gbc.weighty=1.0;statusPanel.add(new Label(),gbc);add(statusPanel,BorderLayout.EAST);

}

Page 30: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

30

private void showStatus(int x, int y){

xLabel.setText(" x = "+x);yLabel.setText(" y = "+y);

}public void mouseDragged(MouseEvent e){

int x = e.getX();int y = e.getY();gPanel.getGraphics().drawLine(x0,y0,x,y);x0=x;y0=y;showStatus(x, y);

}public void mouseMoved(MouseEvent e){

showStatus(e.getX(), e.getY());}

Page 31: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

31

Window schließenDie vorhandenen Schaltflächen und Menüpunkte zum Schließen des Fensters funktionieren standardmäßig nicht.

Die entsprechenden Funktionen müssen erst implementiert werden.

Die Betätigung erzeugt einen WindowEvent.

Die Behandlung erfolgt in einem Objekt das zu einer Klasse gehört, die vom Interface WindowListener bzw. der Klasse WindowAdapter abgeleitet wurde.

Page 32: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

32

Methoden des WindowListener, WindowAdapterpublic void windowActivated(WindowEvent e)Das Fenster war nicht aktiv und wird aktiviert.

public void windowClosed(WindowEvent e)Das Fenster wurde geschlossen, indem dispose() für das Fenster aufgerufen wurde.

public void windowClosing(WindowEvent e)Das Fenster wurde geschlossen, indem die entsprechenden Schaltflächen des Fensters betätigt wurden.

public void windowDeactivated(WindowEvent e)Das Fenster war aktiv und ist es nun nicht mehr.

public void windowDeiconified(WindowEvent e)Das Fenster war minimiert (als Icon) dargestellt und wird nun in normaler Größe dargestellt.

public void windowIconified(WindowEvent e)Das Fenster wird minimiert (als Icon) dargestellt.

public void windowOpened(WindowEvent e)Das Fenster wird das erste mal sichtbar gemacht (setVisible(true)).

Page 33: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

33

public class Paint extends Frame implementsMouseListener, MouseMotionListener, WindowListener

{Paint (String title){ ...

addWindowListener(this);setVisible(true);

}public void windowClosing(WindowEvent e){

dispose();}public void windowClosed(WindowEvent e){

System.exit(0);}public void windowActivated(WindowEvent e) { }public void windowDeactivated(WindowEvent e) { }public void windowDeiconified(WindowEvent e) { }public void windowIconified(WindowEvent e) { }public void windowOpened(WindowEvent e) { }

Page 34: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

34

ButtonsZum Beenden des Programms sollte ein Exit-Button vorhanden sein.Klasse Button abgeleitet von Component.Konstruktoren:

public Button()Knopf ohne Beschriftungpublic Button(String label)Knopf mit Beschriftung

Methoden:public void addActionListener(ActionListener l)public void removeActionListener(ActionListener l) Registrieren bzw. Deregistrieren eines ActionListenerspublic String getLabel()public void setLabel(String label)Lesen bzw. Schreiben der Beschriftungpublic String getActionCommand()public void setActionCommand(String command)Lesen bzw. Setzen des Tastaturkommandos, wenn nicht gesetzt = Label

Page 35: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

35

ActionEventEreignis, das bei folgenden Komponenten auftritt:

Button

MenuItem

TextField

List

Methoden:

public String getActionCommand()Liefert das mit dem Objekt in dem der ActionEvent aufgetreten ist verbundene ActionCommand.

public int getModifiers()Modifizierungstasten die beim Eintreten des ActionEvents gedrückt waren

Page 36: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

36

ActionListener, ActionAdapterListener der auf ActionEvents reagieren.

Enthält genau eine Methode:public void actionPerformed(ActionEvent e)

Diese Methode wird aufgerufen, wenn ein ActionEvent aufgetreten ist.

Page 37: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

37

public class Paint extends Frame implementsMouseListener, MouseMotionListener, WindowListener,ActionListener

{Paint (String title){ ...

createFile();... }private void createFile(){

Panel filePanel = new Panel();filePanel.setBackground(new Color(240,240,240));filePanel.setLayout(new GridBagLayout());Button exitButton = new Button("exit");exitButton.addActionListener(this);filePanel.add(exitButton);add(filePanel,BorderLayout.NORTH);

}public void actionPerformed(ActionEvent e){

dispose();}

Page 38: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

38

MenüsZur Beschreibung von Menüs gibt es einen eigene Familie von Klassen. Diese hat als Wurzel die Klasse MenuComponent.

MenuBar

CheckboxMenuItem

PopupMenu

Menu

MenuItem

MenuComponent

Object

Page 39: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

39

MenüklassenMenuBarKlasse beschreibt den Menübalken, der mit der Methode setMenuBar der Klasse Frame zum Frame hinzugefügt werden kann.

MenuMenu ist die oberste Menüebene, die ständig am oberen Rand des Frames angezeigt wird. In einem Menü können folgende Menükomponenten angezeigt werden:

MenuItem

CheckboxMenuItem

Menu ( Untermenü)

Menu, MenuItem und CheckboxMenuItem reagieren auf ActionEvents.

CheckboxMenuItem reagiert auf ItemEvents.

Wenn bei einem Menu ein Listener registriert wird, reagiert er auf alle Events die bei den MenuItems und CheckboxMenuItems die in dem Menu enthalten sind auftreten.

Page 40: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

40

Zu einem MenuItem kann ein Shortcut definiert werden. Dieser wird dann im Menü angezeigt. Es wird immer eine systemabhängige Modifikationstaste dazudefiniert. Z.B.: <Ctrl> bei Windows und Motif

Konstruktoren

public Menu(String label)

public MenuItem(String label)

public MenuItem(String label, MenuShortcut s)

public CheckboxMenuItem(String label)

public CheckboxMenuItem(String label, boolean state)

new MenuItem("-") erzeugt im Menü einen Trennstrich

Page 41: 1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm

DV

G3 - P

aint

41

Paint (String title){ ...

MenuBar menu = new MenuBar();setMenuBar(menu);createFile(menu);

... }private void createFile(MenuBar menu){

Menu fileMenu = new Menu("File");menu.add(fileMenu);fileMenu.addActionListener(this);fileMenu.add(new MenuItem("exit",

new MenuShortcut('e')));Panel filePanel = new Panel();filePanel.setBackground(new Color(240,240,240));filePanel.setLayout(new GridBagLayout());Button exitButton = new Button("exit");exitButton.addActionListener(this);filePanel.add(exitButton);add(filePanel,BorderLayout.NORTH);

}