Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm."—  Präsentation transkript:

1 1DVG3 - Paint Paint ein Zeichenprogramm

2 DVG3 - Paint 2 Paint – ein Zeichenprogramm

3 DVG3 - Paint 3 AWT - Implementierung AWT 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.

4 DVG3 - Paint 4 AWT - Schichtenmodell Java AWT-Objekt Peer-Interface Peer-Implementation Motif X11 Peer-Implementation Win-API Windows

5 DVG3 - Paint 5 Das Zeichenfenster

6 DVG3 - Paint 6 Öffnen eines Fensters Klasse Frame java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame Konstruktor Frame() Frame(String title) Größe und Position festlegen setBounds (int x, int y, int width, int height) (aus Component ) sichtbar/unsichtbar machen setVisible (boolean b) (aus Component ) Titel ändern setTitle(String title) Standardfarben definieren setBackground(Color c), setForeground(Color c) (aus Component ) Standardfont definieren setFont(Font f) (aus Container )

7 DVG3 - Paint 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); } }

8 DVG3 - Paint 8 Koordinaten im Frame X-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

9 DVG3 - Paint 9 Zeichnen im Frame public 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

10 DVG3 - Paint 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); } } }

11 DVG3 - Paint 11 Hierarchie von AWT-Objekten Container können andere AWT-Objekte aufnehmen. Diese können wieder Container sein. Es entsteht eine Hierarchie von AWT-Objekten. Frame Panel Canvas TextField Panel Checkbox Button Scrollbar Label

12 DVG3 - Paint 12

13 DVG3 - Paint 13 Container - Methoden Hinzufügen einer Komponente public Component add (Component comp) Löschen einer Komponente public void remove (Component comp) Löschen aller Komponenten public void removeAll () Aktualisieren des Containers nach dem Componenten geändert wurden public void validate ()

14 DVG3 - Paint 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

15 DVG3 - Paint 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); } } }

16 DVG3 - Paint 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

17 DVG3 - Paint 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); } }

18 DVG3 - Paint 18 Malen in AWT Zeichnen 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

19 DVG3 - Paint 19 MouseEvent Das 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 ist public 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

20 DVG3 - Paint 20 MouseListener, MouseAdapter Listener, 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.event Methoden: public void mouseClicked(MouseEvent e) wird aufgerufen, wenn die linke Maustaste gedrückt und wieder losgelassen wird public 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ässt public void mousePressed(MouseEvent e) wird aufgerufen, wenn die linke Maustaste gedrückt wird public void mouseReleased(MouseEvent e) wird aufgerufen, wenn die linke Maustaste gedrückt war und wieder losgelassen wird

21 DVG3 - Paint 21 MouseMotionListener, MouseMotionAdapter Listener, 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

22 DVG3 - Paint 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); }

23 DVG3 - Paint 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){} }

24 DVG3 - Paint 24 Layout Container 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 Methode public 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.

25 DVG3 - Paint 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

26 DVG3 - Paint 26 Von LayoutManager2 abgeleitete Layouts CardLayout 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

27 DVG3 - Paint 27 Kombination von Layouts Zur 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

28 DVG3 - Paint 28 Paint-Layout BorderLayout File – Operationen Nachrichten Zeichenwerkzeuge Zeichenfläche Status, Einstellungen

29 DVG3 - Paint 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); }

30 DVG3 - Paint 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()); }

31 DVG3 - Paint 31 Window schließen Die 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.

32 DVG3 - Paint 32 Methoden des WindowListener, WindowAdapter public 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)).

33 DVG3 - Paint 33 public class Paint extends Frame implements MouseListener, 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){}

34 DVG3 - Paint 34 Buttons Zum Beenden des Programms sollte ein Exit-Button vorhanden sein. Klasse Button abgeleitet von Component. Konstruktoren: public Button() Knopf ohne Beschriftung public Button(String label) Knopf mit Beschriftung Methoden: public void addActionListener(ActionListener l) public void removeActionListener(ActionListener l) Registrieren bzw. Deregistrieren eines ActionListeners public String getLabel() public void setLabel(String label) Lesen bzw. Schreiben der Beschriftung public String getActionCommand() public void setActionCommand(String command) Lesen bzw. Setzen des Tastaturkommandos, wenn nicht gesetzt = Label

35 DVG3 - Paint 35 ActionEvent Ereignis, 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

36 DVG3 - Paint 36 ActionListener, ActionAdapter Listener der auf ActionEvents reagieren. Enthält genau eine Methode: public void actionPerformed(ActionEvent e) Diese Methode wird aufgerufen, wenn ein ActionEvent aufgetreten ist.

37 DVG3 - Paint 37 public class Paint extends Frame implements MouseListener, 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(); }

38 DVG3 - Paint 38 Menüs Zur Beschreibung von Menüs gibt es einen eigene Familie von Klassen. Diese hat als Wurzel die Klasse MenuComponent.

39 DVG3 - Paint 39 Menüklassen MenuBar Klasse beschreibt den Menübalken, der mit der Methode setMenuBar der Klasse Frame zum Frame hinzugefügt werden kann. Menu Menu 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.

40 DVG3 - Paint 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.: 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

41 DVG3 - Paint 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); }


Herunterladen ppt "1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm."

Ähnliche Präsentationen


Google-Anzeigen