320 likes | 469 Views
Einführung in die Programmierung mit Java. 14. Vorlesung WS 2004/2005. Übersicht. Benutzeroberflächen Menüs Einfache Graphik Dialog zur Farbauswahl Listen Interaktive Graphik. Menüs. JMenue. JMenueItem. JMenueBar. Menüs: Schritt 1. 2. Klick. 1. Klick. Menüs: Schritt 2. 2. Klick.
E N D
Einführung in die Programmierung mit Java 14. Vorlesung WS 2004/2005
Übersicht • Benutzeroberflächen • Menüs • Einfache Graphik • Dialog zur Farbauswahl • Listen • Interaktive Graphik Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Menüs JMenue JMenueItem JMenueBar Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Menüs: Schritt 1 2. Klick 1. Klick Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Menüs: Schritt 2 2. Klick 1. Klick Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Menüs: Schritt 3 2. Klick 1. Klick Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Menüs: Zwischenergebnis Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Menüs: Schritt 4 - Beschriftung hinzufügen Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Menüs: Schritt 5 - Methode hinzufügen Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Menüs: Methode, die auf Klick reagiert Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Graphik: Methode "paint" • Graphik wird erzeugt durch Überladen der Methode "paint" von "JFrame" (Polymorphismus) • "paint" wird automatisch bei jedem Neuaufbau des Bildschirms aufgerufen • "paint" muss "paint" der Oberklasse aufrufen • "paint" erhält als Parameter ein Objekt der Klasse "Graphics" • Zeichnen: Aufruf von Methoden für "Graphics"-Objekt • Paket "java.awt.*" muss importiert werden Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Zeichnen in Methode "paint" von JFrame • Beispiel: public void paint(Graphics g) { super.paint(g); g.setColor(Color.cyan); g.drawLine(30,40,100,80); g.drawLine(100,80,50,190); } Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Methoden der Klasse „Graphics“ • drawPolygon(int[] xPoints, int[] yPoints, int nPoints) • drawString(String str, int x, int y) drawPolyline(int[] xPoints, int[] yPoints, int nPoints) • drawOval(int x, int y, int width, int height) • drawRect(int x, int y, int width, int height) • fillRect(int x, int y, int width, int height) • setColor(Color c), z.B. setColor(Color.cyan) • weitere Methoden in JavaDoc Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
vorher: Größe des JFrame ändern public MeinFrame() { initComponents (); pack (); setSize(300,300); } Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Übungsaufgabe I • Erzeugt ein JFrame und zeichnet darin die französische Fahne Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Übungsaufgabe II • Erzeugt ein JFrame und zeichnet darin die ein buntes Segelboot mit Segeln und Bullaugen Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Alternative: Graphics2D statt Graphics • Bessere Behandlung der Geometrie, von Koordinatentransformationen, Farben und Texten • Unterklasse Graphics2D statt Graphics in paint (Typumwandlung erforderlich) • Graphics2D hat Methode draw(Shape s) • statt Methoden drawString, drawPolygon, drawPolyline beiGraphics • Graphics2D hat Methode fill(Shape s) • Shapes können sein: • Polygon, RectangularShape, Rectangle, Area, Line2D, GeneralPath, QuadCurve2D, CubicCurve2D, Ellipse2D, ... • Shapes sind eigene Objekte • Paket: java.awt.geom Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Beispiel public void paint(Graphics g) { //Typkonvertierung zu Graphics2D Graphics2D g2d = (Graphics2D) g; //Erzeugung der Shapes Point2D p1 = new Point2D.Double(50,30); Point2D p2 = new Point2D.Double(70,80); Point2D p3 = new Point2D.Double(240,180); Line2D l1 = new Line2D.Double(p1,p2); Line2D l2 = new Line2D.Double(p2,p3); //Zeichnen g2d.setColor(Color.cyan); g2d.draw(l1); g2d.draw(l2); } Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Klasse „GeneralPath“ • für Polylinien bzw. Polygone • „Unterklasse“ von Shape • Methoden: • GeneralPath(): Konstruktor • append(Shape s, boolean connect): Fügt s an GeneralPath an • lineTo(float x, float y): Fügt Punkt (x,y) an • closePath(): schliesst Polygon Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Beispiel public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; Point2D p1 = new Point2D.Double(50,30); Point2D p2 = new Point2D.Double(70,80); Line2D l1 = new Line2D.Double(p1,p2); GeneralPath gp = new GeneralPath(); gp.append(l1,true); gp.lineTo(67,99); gp.closePath(); g2d.setColor(Color.cyan); g2d.draw(gp); g2d.setColor(Color.red); g2d.fill(gp); } Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Interaktiv Farben setzen • JColorChooser: Vordefinierter Dialog für Farbauswahl • Aufruf: Color c = JColorChooser.showDialog (Parent, "Titel", Color); • Parent: Referenz auf JFrame, aus dem ColorChooser aufgerufen wird (eigentlich this-Zeiger) • Titel: Beschriftung auf Leiste des Dialogs • Color: voreingestellte Farbe, z.B. Color.blue • Liefert nach Klicken von OK die ausgewählte Farbe zurück • Parent: bei Aufruf aus Event-Handler:this-Zeiger nicht zugreifbar (da in eingebetteter Klasse) • Lösung: Definition eines Attributs des JFrames, dem im Konstruktor this zugewiesen wird. Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
JColorChooser Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Menüs: Methode, die auf Klick reagiert Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Explizites Auslösen von "paint" • "paint" wird automatisch bei Neuaufbau des Fensters aufgerufen (z.B. nach Verdeckung, nach Maximieren, .....) • explizit kann "paint" durch Aufruf von repaint();ausgelöst werden (Methode von JFrame) • z.B. wenn Farbeinstellungen geändert werden, oder neue Objekte gezeichnet werden sollen Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Hausaufgabe • Erzeugt ein JFrame, in dem interaktiv (über das Menü) alle Fahnen (alle die mit 3 senkrechten oder 3 waagerechten Balken) gezeichnet werden können. Interaktion soll über Menüs erfolgen. Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Exkurs: Listen • LinkedList: Datentyp für Liste (vgl. Vorlesung "Diskrete Mathe") • Anzahl der Elemente beliebig erweiterbar (im Gegensatz zu Arrays) • Elementtyp: Klasse Object • java.util.LinkedList muss importiert werden • Methoden von LinkedList: • boolean add(Object o) • void add(int index, Object element) • Object get(int index) //Index beginnt bei 0 • void clear() • int size() • weitere Methoden in JavaDoc Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Exkurs: Listen - Beispiel import java.util.LinkedList; ..... LinkedList l = new LinkedList(); //Listenobj. erzeugen Person p = new Person(); Professor pr = new Professor(); Assistent a = new Assistent(); l.add(p); l.add(pr); l.add(a); Objekt o = l.get(1); //o referenziert den Prof. Professor pp = (Professor) o; //Typkonvertierung System.out.println(l.size()); //gibt 3 aus l.clear(); System.out.println(l.size()); //gibt 0 aus Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Exkurs: Listen - Iteratoren • dienen zum sequentiellen Durchlaufen durch eine Liste • Iteratoren sind eigene Objekte, die mit der Liste eng verbunden sind • Iterator-Objekt wird durch Aufruf der Methodeiterator() für Liste geliefert • Methoden der Klasse Iterator: • boolean hasNext(): wahr, wenn Durchlauf noch nicht fertig • Object next(): liefert nächstes Listenelement, setzt Zeiger ein Element weiter • Iteratoren führen intern einen Zeiger auf Listenelemente mit • Iterator ist verbraucht, wenn Ende der Liste erreicht • Eine Liste kann beliebig viele Iteratoren haben Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Exkurs: Iteratoren - Beispiel import java.util.LinkedList; LinkedList ll = new LinkedList(); // Liste mit Werten füllen: ll.add(new Person()); ll.add(new Professor()); //Liste Durchlaufen: Iterator it = ll.iterator(); while(it.hasNext()) { Object o = it.next(); System.out.println(o); } Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Interaktives Zeichnen in „paint“ • bisher: Zeichnen fest in „paint“ programmiert • Interaktives Zeichnen: 3 Schritte • Attribut des JFrame der Klasse LinkedList (dient zur Aufnahme der zu zeichnenden Shapes) • in „paint“ wird LinkedList durchlaufen und für jedes Shape darin die Methode „draw“ aufgerufen • Die LinkedList wird mit Shapes gefüllt in z.B. Methode, die auf Mausklicks in JFrame reagiert • Aufruf der Methode repaint() des JFrame löst Aufruf von paint() aus • Klickkoordinaten: getX()/getY() des MouseEvents Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Interaktives Zeichnen - Beispiel I/II public class MeinFenster extends JFrame { LinkedList ll; public MeinFenster() { super(); ll = new LinkedList();...} public void paint(Graphics g){ super.paint(g); Graphics2D g2d = (Graphics2D) g; Iterator it = ll.iterator(); while(it.hasNext()) { Object o = it.next(); Shape s = (Shape) o; g2d.fill(s);} Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
Interaktives Zeichnen - Beispiel II/II public void mouseClicked(java.awt.event.MouseEvent e) { ll.add(new Rectangle(e.getX(), e.getY(),5,8)); repaint(); } Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05