1 / 39

Einführung in die Programmierung mit Java

Einführung in die Programmierung mit Java. 13. Vorlesung WS-03/04. Die letzte Hausaufgabe. 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 !.

troy-baird
Download Presentation

Einführung in die Programmierung mit Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Einführung in dieProgrammierung mit Java 13. Vorlesung WS-03/04

  2. Die letzte Hausaufgabe 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 ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

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

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

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

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

  7. Mein MalprogrammDie 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 ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  8. Mein MalprogrammDie 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 ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  9. ExkursJava an sich zeigen auf Referenzvariablen Objekte/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); } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

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

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

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

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

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

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

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

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

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

  19. Grafikobjekte import java.awt.*; class Ellipseimplements 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; } ... } Interface Beispiel es fehlt noch 1 Methode IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  20. Grafikobjekte import java.awt.*; class Ellipseimplements 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); } ... } Beispiel Methode, die das Interface erzwingt ! Implementierung der Methode IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  21. Grafikobjekte import java.awt.*; class Ellipseimplements 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; } } Beispiel hat nichts mit dem Interface zu tun IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  22. Mein DisplayGrafikobjekte 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 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  23. Mein DisplayGrafikobjekte 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 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  24. Mein Displayvon 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 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  25. Mein Displayvon 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 GrafikObjektgib_grafik_objekt( int index) { return( (GrafikObjekt)grafik_objekte.get( index)); } public void paintComponent( Graphics g) { /*(siehe Folie 22)*/ } } Quellcode Ergänzungen IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

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

  27. Eine Ellipseerschaffen und anzeigen zeichnen • den Button mit einerMethode versehen ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  28. Eine Ellipseerschaffen und anzeigen import java.awt.*; import java.util.*; import javax.swing.*; public classSmileextends JFrame { private Leinwand display; ... private voidjButton1ActionPerformed(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(); } ... } Quellcode Ergänzungen • den Button mit einerMethode versehen ! • die Methode mit Anweisungen füllen ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

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

  30. Eine Ellipsebei allen Ellipsen die Farbe ändern import java.awt.*; import java.util.*; import javax.swing.*; public classSmileextends JFrame { ... private voidjButton2ActionPerformed(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 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  31. Eine Ellipsebei allen Ellipsen die Farbe ändern import java.awt.*; import java.util.*; import javax.swing.*; public classSmileextends JFrame { ... private voidjButton2ActionPerformed(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 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  32. Eine Ellipsebei allen Ellipsen die Farbe ändern import java.awt.*; import java.util.*; import javax.swing.*; public classSmileextends JFrame { ... private voidjButton2ActionPerformed(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 ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

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

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

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

  36. Hintergrundfarbe wählenQuellcode 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 ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  37. 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 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  38. Ü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())); IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  39. 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. IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

More Related