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

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Ein Beispiel in Java.
der Universität Oldenburg
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Java: Objektorientierte Programmierung
Java2D Richard Göbel.
Java: Grundlagen der Objektorientierung
Grafische Benutzeroberfläche
Wie überwacht man Objekte im "Alltag" ?. Indem man "Wanzen" an diese anbringt.
Ein Beispiel in Java.
Konstruktoren.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Sommersemester 2003 Lars Bernard
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 8 Sitzung 8: Zeichnen in Java.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. D. Dörschlag Einführung in die Programmierung mit Java.
Java-Kurs Grafik Julian Drerup.
Programmieren mit JAVA
Programmieren mit JAVA
Programmieren mit JAVA Teil V. Grafikausgabe mit JAVA, das AWT Java wurde von Anfang an mit dem Anspruch entwickelt, ein vielseitiges, aber einfach zu.
1DVG3 - Eventbehandlung Eventbehandlung. DVG3 - Eventbehandlung 2 Events Events sind externe Ereignisse, die parallel zum normalen Programmablauf auftreten.
DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.
DVG1 - Grafikprogrammierung1 Grafikprogrammierung.
Vortrag - Kenny Schlör Applets Einführung in die Appletprogrammierung.
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
DVG A bstract W indow T oolkit. DVG Als standardisierte portable Grafikschnittstelle existiert in JAVA das Package AWT - Abstract Window.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Einführung in Java1 Einführung in JAVA.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
03 - Paint Das Zeichenprogramm EMMA Paint2 Aufgabenstellung Entwicklung eines ausschließlich in JAVA programmierten Graphikprogrammes. Vergleichsprodukte:
DVG Graphik in Swing Graphik in Swing. DVG Graphik in Swing 2 Zeichnen von Objekten in Swing Die Klasse JComponent enthält die Methode.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Step by step zum JFrame 1 Zum JFrame Step by step by step by step by step by step by step by step by.
Bestimmung des ggT zweier Zahlen
© 2005 Pohlig GK Informatik K Zum JFrame Step by step by step by step by step by step by step by step by.
© 2006 MPohlig Grundkurs Informatik mit Java 1 JFrame-Vorlage Step by step by step by step by step by step by step by step by.
FH-Hof Java2D - Grundlagen Richard Göbel. FH-Hof Java2D - Funktionen Java2D unterstützt: das Zeichnen von Grafiken die Darstellung von Texten die Darstellung.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
AWT und JFC Abstract Windowing Toolkit
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
Applets Java für’s Web.
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Programmierpraktikum Java SS 2005
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Lind 02/2005 Einführung in JAVA. Lind 02/2005 Beispiel: Mittelwert Es soll ein Programm erstellt werden, das den Mittelwert zweier reeller Zahlen berechnet.
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Schleifen
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
© 2005 Pohlig Informatik Jg. 11 mfH Michael Pohlig 1 Zum JFrame Step by step by step by step by step by step by step by step by.
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
A Workshop About this chapter General description Units Time Schedule
Einführung in die OOP in Java
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Abstract Windowing Toolkit
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Mit der Turtle Java Programmieren
Mit Java die Turtle steuern
 Präsentation transkript:

1DVG3 - Paint Paint ein Zeichenprogramm

DVG3 - Paint 2 Paint – ein Zeichenprogramm

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.

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

DVG3 - Paint 5 Das Zeichenfenster

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 )

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

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

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

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

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

DVG3 - Paint 12

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 ()

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

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

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

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

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

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

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

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

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

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){} }

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.

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

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

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

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

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

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

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.

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

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){}

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

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

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.

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

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

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.

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

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