CuP - Java Achzehnte (und LETZTE. ) Vorlesung : 1

Slides:



Advertisements
Ähnliche Präsentationen
programmiert April-Juni 2003 von Knut Riechmann
Advertisements

der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
Ein Beispiel in Java.
Kapselung , toString , equals , Java API
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java2D Richard Göbel.
Java: Dynamische Datentypen
Einfache Komponenten in SWING
Java: Grundlagen der Objektorientierung
Grafische Benutzeroberfläche
Wie überwacht man Objekte im "Alltag" ?. Indem man "Wanzen" an diese anbringt.
Ein Beispiel in Java.
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 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
AWT – Detailbetrachtung Java 3D – Seminar im Wintersemester 2002/2003 Christian Schneider.
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.
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Zusammenfassung Vorwoche
1DVG3 - Eventbehandlung Eventbehandlung. DVG3 - Eventbehandlung 2 Events Events sind externe Ereignisse, die parallel zum normalen Programmablauf auftreten.
Vortrag - Kenny Schlör Applets Einführung in die Appletprogrammierung.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
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.
UNDO & SELECT Vortrag : Martin Hiersche
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Klassen 02 - Klassen.
Schleifen mit der Turtle
Weitere Beispiele für Verzweigung mit und ohne Turtle
Verzweigung.
© 2004 Pohlig - Taulien Swing Ereignissteuerung. © 2004 Pohlig - Taulien GK Informatik mit Java 2 Auf Button-Klick reagieren.
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.
Objektorientierte Modellierung
Benutzeroberflächen mit Java
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Variablenkonzept Klassisch, in Java Basistyp
Java-AG Benutzeroberflächen Juni 2001 Michael Haas.
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
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 Instanzmethoden
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Java-Kurs Übung Benutzeroberflächen und Graphik
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
 Präsentation transkript:

CuP - Java Achzehnte (und LETZTE. ) Vorlesung : 1 CuP - Java Achzehnte (und LETZTE!) Vorlesung : 1.Teil: Vergleiche Skriptum Kapitel 8.1 2.Teil: WIEDERHOLUNG . Montag, 9. Dezember 2002

Threads Ein Thread ist ein Programmteil der eigenständig laufen kann während zur selben Zeit noch andere Aufgaben erledigt werden können (Multitasking!) Ein Thread verlangt das Runnable-Interface und somit die Implementierung der Methode run( ) Die Methode run( ) kann Interrupt-Exceptions produzieren und verlangt daher ein Exception-Handling Zum Abfangen der Interrupt-Exception verwendet man die Kontrollstruktur try{ ... } catch(InterruptedException e){ ... } 9. Dezember 2002 CuP WS 2002/2003

Threads Generierung mit Hilfe des Interface Runnable Implementierung: ... implements Runnable{ .... } Deklaration: Thread thread1; Initialisierung (in der Methode start( )): thread1=new Thread(this); Start: thread1.start( ); Aktivierung durch die Methode: void run( ){ ... } 9. Dezember 2002 CuP WS 2002/2003

Implementierung eines Threads (1/2) import java.awt.*; import java.applet.Applet; public class AThread extends Applet implements Runnable{ // Interface private Thread meinThread; // Deklaration des Threads private int t=0; // Sekundenzähler public void start(){ meinThread=new Thread(this); // Initialisierung des Threads meinThread.start(); // Start des Threads } 9. Dezember 2002 CuP WS 2002/2003

Implementierung eines Threads (2/2) public void run(){ // Aktivierung des Threads while (true) { try Thread.currentThread().sleep(1000); } catch(InterruptedException e){} t++; repaint(); public void paint(Graphics g){ g.drawString("Thread ist seit ” + t + " Sekunden aktiv!", 100,100); 9. Dezember 2002 CuP WS 2002/2003

Ein komplexeres Beispiel zu Threads import java.awt.event.*; import java.awt.*; import java.applet.Applet; public class Reflexionen1 extends Applet implements ActionListener{ private Button start, stop; private Ball [] ball =new Ball[20]; int anzahl=0; public void init(){ setSize(500,500); start = new Button("Start"); add(start); start.addActionListener(this); stop = new Button("Stop"); add(stop); stop.addActionListener(this); } 9. Dezember 2002 CuP WS 2002/2003

public void actionPerformed(ActionEvent e){ Graphics g=getGraphics(); g.setColor(Color.white); g.drawString("Anzahl der Baelle: "+anzahl,50,470); if(e.getSource() == start && anzahl < 20){ ball[anzahl]=new Ball(g); ball[anzahl].start(); anzahl++; } if (e.getSource() == stop && anzahl > 0) { anzahl--; ball[anzahl].stirb(); g.setColor(Color.black); 9. Dezember 2002 CuP WS 2002/2003

class Ball extends Thread{ private Graphics g; private boolean springe; private int x, y; private String dirX="links", dirY="hinauf”; private int sizeX=400, sizeY=400; public Ball(Graphics h){ g=h; springe=true; x=(int)(Math.random()*380 + 50); y=(int)(Math.random()*380 + 50); } public void stirb(){ springe=false; g.setColor(Color.white); g.fillOval(x,y,20,20); 9. Dezember 2002 CuP WS 2002/2003

g.setColor(Color.white); g.fillOval(x,y,20,20); public void run(){ while (springe) { g.setColor(Color.white); g.fillOval(x,y,20,20); if (dirX.equals("rechts")) x++; else x--; if (dirY.equals("hinunter")) y++; else y--; if(x == sizeX+30) dirX = "links"; if(x == 50) dirX = "rechts"; if(y == sizeY+30) dirY = "hinauf"; if(y == 50) dirY = "hinunter"; g.setColor(Color.black); g.drawRect(50,50,sizeX,sizeY); g.setColor(Color.red); g.fillOval(x,y,20,20); try { Thread.sleep(10); } catch (InterruptedException e){ System.err.println("sleep exception"); } } } } 9. Dezember 2002 CuP WS 2002/2003

Wiederholung des Beispiels aus der 16 Wiederholung des Beispiels aus der 16. Vorlesung: Eine Klasse SchneeFall erweitert die Klasse Applet Instanzvariable: Tabelle schneeDaten; TextField wert; Methoden: init: erzeugt ein Objekt der Klasse Tabelle  schneeDaten erzeugt ein Objekt der Klasse Label  markierung mit Beschriftung “Zahl eingeben und Komponente anklicken” und fügt dieses dem Applet hinzu erzeugt ein Objekt der Klasse TextField  wert aktiviert den ActionListener für das Textfeld aktiviert den MouseListener für das Applet 9. Dezember 2002 CuP WS 2002/2003

Für den ActionListener und MouseListener sind noch folgende paint: ruft eine Instanzmethode zeigen auf (ist in der Klasse Tabelle zu deklarieren) der Parameter g der Klasse Graphics wird nur weitergereicht Für den ActionListener und MouseListener sind noch folgende Methoden zu implementieren: actionPerformed: übernimmt einen Wert aus dem Textfeld wert und initialisiert damit die Instanzvariable neuerWert des Objekts schneeDaten mouseClicked: bestimmt die y-Koordinate des letzten Maus-Klicks und ruft eine Instanzmethode waehleKomponente mit diesem Pixelwert als Parameter auf (ist in der Klasse Tabelle zu deklarieren) führt die Methode repaint aus 9. Dezember 2002 CuP WS 2002/2003

sind weitere Methoden, die vom Interface MouseListener verlangt mouseReleased, mousePressed, mouseEntered, mouseExited sind weitere Methoden, die vom Interface MouseListener verlangt werden und daher (wenn auch ohne Funktion) implementiert werden müssen 9. Dezember 2002 CuP WS 2002/2003

Die Klasse Tabelle Instanzvariable: int [ ] schnee; int index, neuerWert, summe; für die Schneewerte, den Feldindex, den aus dem Textfeld zu übernehmenden Wert, die Summe aller Schneewerte sowie tabellenGroesse, startX, startY, feldHoehe, feldBreite zur Vereinbarung von Konstanten Methoden: zeigen: hat ein Graphics-Objekt g als Parameter, das benötigt wird um die Zeichenmethoden drawRect und drawString verwenden zu können zeichnet 7 Rechtecke der Breite 60 und Höhe 20 untereinander übernimmt die Werte aus dem Feld schnee und schreibt sie in die Rechtecke ruft die Methode addiereWerte auf und gibt Wochenschneefall aus 9. Dezember 2002 CuP WS 2002/2003

hat die y-Koordinate eines Maus-Klicks als Parameter waehleKomponente: hat die y-Koordinate eines Maus-Klicks als Parameter berechnet den zu dieser y-Koordinate gehörigen index eines Feldelements von schnee schreibt den Wert der Instanzvariablen neuerWert in das Feldelement schnee[index] setzeWert: weist der Instanzvariablen neuerWert jenen Wert zu, der als Parameter übergeben wird addiereWerte: berechnet den aktuellen Wert der Instanzvariablen summe durch Summation der 7 Feldelemente von schnee 9. Dezember 2002 CuP WS 2002/2003

Übungsbeispiel für den 2. KNW: Angabe: Schreiben Sie ein Applet zur graphischen Darstellung einer Analoguhr unter Verwendung des Timers. Das Ziffernblatt soll ein Kreis mit Mittelpunkt (200,150) und Radius 100 Pixel sein. Der Sekundenzeiger - eine Linie vom Mittelpunkt des Kreises zu einem am Kreis befindlichen Punkt (Länge 100 Pixel) - soll im Sekundentakt um 6° (also eine Sekunde) weiterhüpfen. Der Minutenzeiger soll die Länge 80 Pixel haben und einmal pro Minute um 6° weiterhüpfen. Den Stundenzeiger der Länge 70 Pixel lassen Sie der Einfachheit halber einmal pro Stunde um 30° weiterhüpfen. Verwenden Sie eine Hilfsklasse namens Uhr, welche die Methoden zum Zeichnen des Ziffernblatts und der drei Zeiger bereitstellt. Eine weitere Methode zum Mitzählen der verstrichenen Sekunden, Minuten und Stunden könnte sich als praktisch erweisen. 9. Dezember 2002 CuP WS 2002/2003

import java.awt.event.*; import java.awt.*; import java.applet.Applet; import javax.swing.*; public class Analoguhr extends Applet implements ActionListener{ private Timer timer; Uhr meineUhr=new Uhr(); public void init(){ timer = new Timer(1000,this); timer.start(); } public void paint(Graphics g){ meineUhr.tick(); meineUhr.ziffernblatt(g); meineUhr.sekundenzeiger(g); meineUhr.minutenzeiger(g); meineUhr.stundenzeiger(g); public void actionPerformed(ActionEvent e){ if(e.getSource() == timer) repaint(); 9. Dezember 2002 CuP WS 2002/2003

public void ziffernblatt(Graphics g){ g.drawOval(100,50,200,200); class Uhr{ int sek=0,min,std; public void tick(){ sek++; if (sek==60) { min++; sek=0; } if (min==60) std++; min=0; if (std==12) std=0; public void ziffernblatt(Graphics g){ g.drawOval(100,50,200,200); 9. Dezember 2002 CuP WS 2002/2003

public void sekundenzeiger(Graphics g){ int xSek=(int)(200.0 + 100.0*Math.sin(2.0*Math.PI*sek/60.0)); int ySek=(int)(150.0 - 100.0*Math.cos(2.0*Math.PI*sek/60.0)); g.drawLine(200,150,xSek,ySek); } public void minutenzeiger(Graphics g){ int xMin=(int)(200.0 + 80.0*Math.sin(2.0*Math.PI*min/60.0)); int yMin=(int)(150.0 - 80.0*Math.cos(2.0*Math.PI*min/60.0)); g.drawLine(200,150,xMin,yMin); public void stundenzeiger(Graphics g){ int xStd=(int)(200.0 + 70.0*Math.sin(2.0*Math.PI*std/12.0)); int yStd=(int)(150.0 - 70.0*Math.cos(2.0*Math.PI*std/12.0)); g.drawLine(200,150,xStd,yStd); 9. Dezember 2002 CuP WS 2002/2003

Ein weiteres Beispiel: Angabe: Schreiben Sie ein Applet, welches ein Spiel mit einem einarmigen Banditen simuliert. Über ein Textfeld soll der einzuwerfende Geldbetrag - dieser betrage einen Euro - eingelesen werden, sobald ein Button “Neues Spiel” gedrückt wird. Drei weitere nebeneinander plazierte Schaltflächen sollen die Bedienung des (virtuellen) Spielautomaten erlauben. Beim Einwurf von einem Euro sind 3 Knopfdrucke erlaubt. Beim Drücken jedes der drei Buttons soll eine Zufallszahl im Bereich 1 bis 7 generiert werden und jeweils unterhalb der entsprechenden Schaltfläche ausgegeben werden. Bei drei gleichen Zufallszahlen ergibt sich ein Gewinn von 10 Euro, bei zwei gleichen ein Gewinn von 2 Euro. Der Gewinn (oder Verlust) soll in Form eines Antworttextes ausgegeben werden. Eine Hilfsklasse Automat soll die Methoden des Spielautomaten bereitstellen. 9. Dezember 2002 CuP WS 2002/2003

import java.awt.event.*; import java.awt.*; import java.applet.Applet; public class Bandit extends Applet implements ActionListener{ private TextField eingabe; private Button k1, k2, k3, neuesSpiel; String muenze; int gespielt=0; Automat a=new Automat(); public void init(){ eingabe=new TextField(2); add(eingabe); k1=new Button("Zahl 1"); add(k1); k1.addActionListener(this); k2=new Button("Zahl 2"); add(k2); k2.addActionListener(this); k3=new Button("Zahl 3"); add(k3); k3.addActionListener(this); neuesSpiel=new Button("Neues Spiel"); add(neuesSpiel); neuesSpiel.addActionListener(this); } public void actionPerformed(ActionEvent e){ Graphics g=getGraphics(); if (e.getSource() == k1 && !a.gameOver){ a.zufallszahl(g,1); gespielt++; 9. Dezember 2002 CuP WS 2002/2003

if (e.getSource() == k2 && !a.gameOver){ a.zufallszahl(g,2); gespielt++; } if (e.getSource() == k3 && !a.gameOver){ a.zufallszahl(g,3); gespielt++; if (e.getSource() == neuesSpiel){ gespielt=0; muenze=eingabe.getText(); if (muenze.equals("1")){ a.gameOver=false; a.spiel(g); else{ a.gameOver=true; g.clearRect(100,90,200,100); g.drawString("Bitte 1 Euro einwerfen!!!",100,150); if (gespielt==3){ a.gewinnausgabe(g); 9. Dezember 2002 CuP WS 2002/2003

boolean gameOver = true; public void spiel(Graphics g){ class Automat{ int [] zahl=new int[3]; boolean gameOver = true; public void spiel(Graphics g){ zahl[0]=8; zahl[1]=9; zahl[2]=10; g.clearRect(100,90,200,100); } public void zufallszahl(Graphics g, int i){ zahl[i-1]=(int)(Math.random()*7+1); g.clearRect(100+i*40,90,20,20); g.drawString(Integer.toString(zahl[i-1]),100+i*40,100); public void gewinnausgabe(Graphics g){ if (zahl[0]==zahl[1] && zahl[1]==zahl[2]) g.drawString("Sie haben 10 Euro gewonnen!!!",100,150); else if (zahl[0]==zahl[1] || zahl[0]==zahl[2] || zahl[1]==zahl[2]) g.drawString("Sie haben 2 Euro gewonnen!!!",100,150); else g.drawString("Sie haben verloren!!!",100,150); 9. Dezember 2002 CuP WS 2002/2003

Kontrollfragen Was ist event-handling? Welches Paket muss fürs event-handling importiert werden? Welche Steuerflächen verlangen nach der Schnittstelle ActionListener? Wie wird ein Textfeld deklariert und instanziert? Wie heißt die Methode, die Veränderungen in einem Listenfeld detektieren kann? 9. Dezember 2002 CuP WS 2002/2003

Was ist bei der Verwendung eines Interface zu beachten? Welche Schritte sind für die Implementierung eines Timers nötig? Nennen Sie drei Methoden, die bei der Ausführung eines Java-Applets automatisch aufgerufen werden? Was bedeutet Vererbung? Erklären Sie die Begriffe Überschreiben und Überladen. 9. Dezember 2002 CuP WS 2002/2003

Frohe Weihnachten und einen Guten Rutsch ins Neue Jahr! ... und geniessen Sie die Ferien, Sie haben sie verdient :) JK