Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit."—  Präsentation transkript:

1 Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit Java 13. Vorlesung WS-03/04

2 2 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Malprogramm der vollständige und kommentierte Quellcode für mein Malprogramm steht im Internet und auf den Folien der letzen Vorlesung. Weite Teile werden in dieser Vorlesung wiederholt ! Die letzte Hausaufgabe

3 3 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Mein Malprogramm Smile

4 4 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Mein Malprogramm Smile Leinwand zum Bemalen: JPanel Funktionsknöpfe : JToolBox + JToggleButton Anwendungsmenü : JMenuBar + JMenu + JMenuItem

5 5 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 x y Mein Malprogramm das Leinwandkoordinatensystem Leinwand zum Bemalen: JPanel Funktionsknöpfe : JToolBox + JToggleButton Anwendungsmenü : JMenuBar + JMenu + JMenuItem (0,0) + +

6 6 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Mein Malprogramm Smile Leinwand zum Bemalen: JPanel Funktionsknöpfe : JToolBox + JToggleButton Anwendungsmenü : JMenuBar + JMenu + JMenuItem class Smile extends JFrame { Leinwand display;... } class Leinwand extends JPanel {... } Es gibt 2 Quellcode- Dateien : Leinwand.java Smile.java

7 7 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Mein Malprogramm Die Leinwand der Anwendung hinzufügen import javax.swing.*; import java.awt.*; class Smile extends JFrame { Leinwand display; public Smile(){ display = new Leinwand( this); this.getContentPane().setLayout( new BorderLayout()); this.getContentPane().add( display, BorderLayout.CENTER); initComponets(); }... } Alle roten Anweisungen sind von Hand zu programmieren ! Den Rest erzeugt Forte beim Anlegen eines JFrame automatisch !

8 8 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Mein Malprogramm Die Leinwand bemalen import java.awt.*; class Leinwand extends JPanel { private Smile parent; public Leinwand( Smile parent){ this.parent = parent; initComponents(); }... public void paintComponent( Graphics g){ super.paintComponent( g); Graphics2D g2d = (Graphics2D) g; g2d.drawOval( (30 – 5), (30 – 5), 10,10);... }... } Alle roten Anweisungen sind von Hand zu programmieren ! Den Rest erzeugt Forte beim anlegen eines JPanel automatisch !

9 9 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Exkurs Java an sich ReferenzvariablenObjekte/Instanzen Referenzvariablen sind u.a. Variablen, Attribute oder Parameter vom Typ einer Klasse oder eines Interfaces Sind konkrete Instanzen einer bestimmten Klasse (= Typ des Objekts) mit einer eigenen Menge von Methoden und Attributen Weiß welche Methoden das Objekt mindestens hat !  Methodenkopf Weiß, was eine Methode macht, wenn sie aufgerufen wird !  Methodenrumpf public void zeichnen_auf( Graphics2d g2d)public void zeichnen_auf( Graphics2d g2d) { g2d.drawOval(x,y,breite, hoehe); } zeigen auf

10 10 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 dynamisches Malen = malen mittels Nutzerinteraktion dynamisch Objekte auf die Oberfläche malen Ziel :

11 11 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 dynamisches Malen dynamisch Objekte auf die Oberfläche malen auf Knopfdruckauf Mausklick Ziel :

12 12 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 dynamisches Malen dynamisch Objekte auf die Oberfläche malen auf Knopfdruckauf Mausklick Kann nur Objekte brauchen, die sich selbst zeichnen können + zeichnen_auf(Graphics2D g2d):void Ziel : ! UML – Notation ! Was gemalt wird, ist je nach Typ des Objekts ganz unterschiedlich !

13 13 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 dynamisches Malen dynamisch Objekte auf die Oberfläche malen auf Knopfdruckauf Mausklick KreisEllipseLinie Kann nur Objekte brauchen, die sich selbst zeichnen können + zeichnen_auf(Graphics2D g2d):void Ziel : Punkt

14 14 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 dynamisches Malen dynamisch Objekte auf die Oberfläche malen auf Knopfdruckauf Mausklick KreisEllipseLinie Kann nur Objekte brauchen, die sich selbst zeichnen können + zeichnen_auf(Graphics2D g2d):void Ziel : Punkt Point Line2D

15 15 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 extends dynamisches Malen dynamisch Objekte auf die Oberfläche malen auf Knopfdruckauf Mausklick KreisEllipseLinie Kann nur Objekte brauchen, die sich selbst zeichnen können + zeichnen_auf(Graphics2D g2d):void Ziel : Punkt Point Line2D ! mehrfach Vererbung !  in Java verboten !

16 16 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 erzwingt implements dynamisches Malen dynamisch Objekte auf die Oberfläche malen auf Knopfdruckauf Mausklick KreisEllipseLinie Kann nur Objekte brauchen, die sich selbst zeichnen können + zeichnen_auf(Graphics2D g2d):void Ziel : Punkt Point Line2D Lösung : Grafikobjekt - Interface

17 17 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Mein Display Grafikobjekte import java.awt.*; interface GrafikObjekt { public void zeichnen_auf( Graphics2D g2d); } Graphics2D und Point sind Klassen des Package java.awt. Jedes Interface steht in einer eigenen Interfacename.java Datei, die z.B. den hier abgebildeten Quellcode enthält Alle roten Anweisungen sind von Hand zu programmieren ! Den Rest erzeugt Forte beim anlegen eines Interface automatisch !

18 18 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Ein Interface anlegen mit Forte

19 19 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Beispiel es fehlt noch 1 Methode Interface import java.awt.*; class Ellipse implements GrafikObjekt { // Attribute der Klasse Ellipse int x, y, breite, hoehe; Color farbe; // Konstruktor der Klasse Ellipse public Ellipse( int x, int y, int breite, int hoehe) { this.x = x; this.y = y; this.breite = breite; this.hoehe = hoehe; this.farbe = Color.BLACK; }... } Grafikobjekte

20 20 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 import java.awt.*; class Ellipse implements GrafikObjekt { // Attribute der Klasse Ellipse int x, y, breite, hoehe; Color farbe; // Konstruktor der Klasse Ellipse public Ellipse( int x, int y, int breite, int hoehe) { this.x = x; this.y = y; this.breite = breite; this.hoehe = hoehe; this.farbe = Color.BLACK; } public void zeichnen_auf( Graphics2D g2d) { g2d.setColor( farbe); g2d.drawOval( x – (breite / 2), y – (hoehe / 2), breite, hoehe); }... } Grafikobjekte Beispiel Methode, die das Interface erzwingt ! Implementierung der Methode

21 21 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 import java.awt.*; class Ellipse implements GrafikObjekt { // Attribute der Klasse Ellipse int x, y, breite, hoehe; Color farbe; // Konstruktor der Klasse Ellipse public Ellipse( int x, int y, int breite, int hoehe) { this.x = x; this.y = y; this.breite = breite; this.hoehe = hoehe; this.farbe = Color.BLACK; } public void zeichen_auf( Graphics2D g2d) { g2d.setColor( farbe); g2d.drawOval( x – (breite / 2), y – (hoehe / 2), breite, hoehe); } public void farbe_setzen( Color farbe) { this.farbe = farbe; } Grafikobjekte Beispiel hat nichts mit dem Interface zu tun

22 22 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Mein Display Grafikobjekte anzeigen import javax.swing.*; import java.util.*; import java.awt.*; class Leinwand extends JPanel { private DefaultListModel grafik_objekte = new DefaultListModel(); public void paintComponent( Graphics g) { super.paintComponent( g); Graphics2D g2d = (Graphics2D) g; Enumeration laeufer = grafik_objekte.elements(); while( laeufer.hasMoreElements()){ GrafikObjekt go = (GrafikObjekt) laeufer.nextElement(); go.zeichen_auf( g2d); } Quellcode Ergänzungen

23 23 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Mein Display Grafikobjekte hinzufügen import java.swing.*; import java.util.*; import java.awt.*; class Leinwand extends JPanel { private DefaultListModel grafik_objekte = new DefaultListModel(); public void grafik_objekt_hinzufuegen( GrafikObjekt go) { if( go != null) this.grafik_objekte.addElement( go); } public void paintComponent( Graphics g) { /*(siehe Folie 22)*/ } } Quellcode Ergänzungen

24 24 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 alle Mein Display von außen auf alle Grafikobjekte zugreifen import java.swing.*; import java.util.*; import java.awt.*; class Leinwand extends JPanel { private DefaultListModel grafik_objekte = new DefaultListModel(); public void grafik_objekt_hinzufuegen( GrafikObjekt go) { /*(siehe Folie 23)*/ } public Enumeration grafik_elemente() { return( grafik_objekte.elements()); } public void paintComponent( Graphics g) { /*(siehe Folie 22)*/ } } Quellcode Ergänzungen

25 25 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 ein Mein Display von außen auf ein Grafikobjekt zugreifen import java.swing.*; import java.util.*; import java.awt.*; class Leinwand extends JPanel { private DefaultListModel grafik_objekte = new DefaultListModel(); public void grafik_objekt_hinzufuegen( GrafikObjekt go) { /*(siehe Folie 23)*/ } public Enumeration grafik_elemente() { /*(siehe Folie 24)*/ } public GrafikObjekt gib_grafik_objekt( int index) { return( (GrafikObjekt) grafik_objekte.get( index)); } public void paintComponent( Graphics g) { /*(siehe Folie 22)*/ } } Quellcode Ergänzungen

26 26 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Menu Mein Malprogramm Die Ellipsen-Toolbar x :y :breite :hoehe : zeichnen JLabel JTextField JButton JToolBar Smile

27 27 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Eine Ellipse erschaffen und anzeigen 1.den Button mit einer Methode versehen ! zeichnen

28 28 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Eine Ellipse erschaffen und anzeigen import java.awt.*; import java.util.*; import javax.swing.*; public class Smile extends JFrame { private Leinwand display;... private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String x_wert = jTextfield1.getText(); String y_wert = jTextfield2.getText(); String breite_wert = jTextfield3.getText(); String hoehe_wert = jTextfield4.getText(); int x = Integer.parseInt( x_wert); int y = Integer.parseInt( y_wert); int breite = Integer.parseInt( breite_wert); int hoehe = Integer.parseInt( hoehe_wert); GrafikObjekt go = new Ellipse( x, y, breite, hoehe); display.grafik_objekt_hinzufuegen( go); this.repaint(); }... } 1.den Button mit einer Methode versehen ! 2.die Methode mit Anweisungen füllen ! Quellcode Ergänzungen

29 29 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Eine Ellipse bei allen Ellipsen die Farbe ändern Menu x :y :breite :hoehe : zeichnen JLabel JTextField JButton JToolBar Smile regenbogen JButton

30 30 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Eine Ellipse bei allen Ellipsen die Farbe ändern import java.awt.*; import java.util.*; import javax.swing.*; public class Smile extends JFrame {... private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { Enumeration laeufer = display.grafik_elemente(); GrafikObjekt go; float rot, gruen, blau; while( laeufer.hasMoreElements()){ go = (GrafikObjekt) laeufer.nextElement(); if( go instanceof Ellipse){ rot = (float) Math.random(); gruen = (float) Math.random(); blau = (float) Math.random(); ((Ellipse) go).farbe_setzen( new Color( rot, gruen, blau)); } this.repaint(); }... } Quellcode Ergänzungen

31 31 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Eine Ellipse bei allen Ellipsen die Farbe ändern import java.awt.*; import java.util.*; import javax.swing.*; public class Smile extends JFrame {... private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { Enumeration laeufer = display.grafik_elemente(); GrafikObjekt go; float rot, gruen, blau; while( laeufer.hasMoreElements()){ go = (GrafikObjekt) laeufer.nextElement(); if( go instanceof Ellipse){ rot = (float) Math.random(); gruen = (float) Math.random(); blau = (float) Math.random(); ((Ellipse) go).farbe_setzen( new Color( rot, gruen, blau)); } this.repaint(); }... } Quellcode Ergänzungen explizite Typenkonvertierung

32 32 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Eine Ellipse bei allen Ellipsen die Farbe ändern import java.awt.*; import java.util.*; import javax.swing.*; public class Smile extends JFrame {... private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { Enumeration laeufer = display.grafik_elemente(); GrafikObjekt go; float rot, gruen, blau; while( laeufer.hasMoreElements()){ go = (GrafikObjekt) laeufer.nextElement(); if( go instanceof Ellipse){ rot = (float) Math.random(); gruen = (float) Math.random(); blau = (float) Math.random(); ((Ellipse) go).farbe_setzen( new Color( rot, gruen, blau)); } this.repaint(); }... } Quellcode Ergänzungen Anweisungen, die für das Durch- laufen der Liste notwendig sind !

33 33 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Hintergrundfarbe wählen

34 34 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Hintergrundfarbe wählen JMenu und JRadioButtonItem hinzufügen

35 35 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Mein Display JRadioButtonItem mit Aktionen belegen Mit der Lupe kann in eine Komponente hin- eingeschaut werden. Hierzu muss mit der Maus auf die Lupe geklickt werden !

36 36 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Hintergrundfarbe wählen Quellcode ergänzen private void jRadioButtonMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) { jRadioButtonMenuItem1.setSelected( false); jRadioButtonMenuItem2.setSelected( false); display.setBackground( Color.CYAN); repaint(); } private void jRadioButtonMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) { jRadioButtonMenuItem1.setSelected( false); jRadioButtonMenuItem3.setSelected( false); display.setBackground( Color.YELLOW); repaint(); } private void jRadioButtonMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { jRadioButtonMenuItem2.setSelected( false); jRadioButtonMenuItem3.setSelected( false); display.setBackground( Color.WHITE); repaint(); } Teil der Klasse Smile !

37 37 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 unterschiedliche Mausereignisse anklicken mit der Maus mit dem Mauszeiger auf die Komponente kommen mit dem Mauszeiger die Komponente verlassen während der Mausknopf länger gedrückt ist sobald der Mausknopf losgelassen wird

38 38 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Übungsaufgabe Erweitern des Malprogramms Bei einem Klick mit der Maus auf die Leinwand [  JPanel] sollen die Werte der beiden zu ergänzenden Attribute mittelpunkt_x und mittelpunkt_y von Typ int die aktuelle Position des Mauszeigers zugewiesen bekommen [mittelpunkt_x = evt.getX() und mittelpunkt_y = evt.getY()]. Die beiden Attribute sollen einen negativen Wert haben solange der ToggleButton „Ellipse“ nicht gedrückt ist und wenn gerade eine neue Ellipse erzeugt wurde. Eine neue Ellipse wird genau dann erzeugt, wenn mit der Maus auf die Leinwand geklickt wird, der ToggleButton „Ellipse“ gedrückt ist und die Attribute mittelpunkt_x und mittelpunkt_y nicht negative Werte enthalten. Nach dem Erzeugen sind die Attribute mittelpunkt_x und mittelpunkt_y wieder auf negative Werte zu setzen ! Das neue Ellipsenobjekt erhält man mittels GrafikObjekt neu = new Ellipse( mittelpunkt_x, mittelpunkt_y, 2*( mittelpunkt_x –evt.getX()), 2*( mittelpunkt_y – evt.getY()));

39 39 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Hausaufgabe Erweitern des Malprogramms Schreib, eine Toolbar für Rechtecke, die das Selbe macht, wie die ToolBar für Ellipsen aus der Vorlesung. (Folie 26 – 32) Hinweis: Hierfür müsst ihr eine extra Klasse Rechteck schreiben, welche das Interface GrafikObjekt implementiert.


Herunterladen ppt "Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit."

Ähnliche Präsentationen


Google-Anzeigen