Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Learning By Doing Client-Server Client-Server-Architektur Dünner Client-Dünner Server Dünner Client-Dicker Server Dicker Client-Dünner Server CGI, JSP,

Ähnliche Präsentationen


Präsentation zum Thema: "Learning By Doing Client-Server Client-Server-Architektur Dünner Client-Dünner Server Dünner Client-Dicker Server Dicker Client-Dünner Server CGI, JSP,"—  Präsentation transkript:

1 Learning By Doing Client-Server Client-Server-Architektur Dünner Client-Dünner Server Dünner Client-Dicker Server Dicker Client-Dünner Server CGI, JSP, PHP, ASP,... JavaScript, Applet, ActiveX Web-Browser Hilfsprogramm

2 Learning By Doing 2 Sorten Applets Applets In Browserfenster eingebettetEigenes Applikationsfenster Beispiele auf

3 Learning By Doing Callbackmechanismen Callbackmechanismen bei Applets Ein Applet ist ein eventgesteuertes Java-Programm s. Buch S. 624ff Die Events werden vom Browser über Callbackmethoden dem Applet mitgeteilt Damit ein Applet in den Genuss dieser Aufrufe kommt, muss es eine Klasse sein, die aus der Klasse Applet oder JApplet abgeleitet wird, und nach Bedarf folgende Callbackmethoden überschreibt: MethodeEreignis/AufrufTypische Verwendung void init() Nach Initialisierungsphase. Informiert, dass die Klassen geladen sind und der Applet- Kontext erstellt ist Initialisierung von GUI-Komponenten Registrierung von Listener Hinzufügen von Komponenten (Buttons, usw.) Holen von HTML-Parameterwerten void start() Nach init() und immer, wenn man auf die HTML-Seite zurückkommt Starten oder Reaktivieren eines eigenen Threads Startwert-Initialisierung void stop() Beim Verlassen der HTML-Seite Stoppen des eigenen Threads Anhalten des Abspielens von Sound void destroy() Beim Beenden des Browsers(Normalerweise nicht verwendet)

4 Learning By Doing Paint, update Zeichnen/Ausschreiben in ein Applet-Fenster Die aus Applet abgeleitete eigene Appletklasse besitzt als Oberklasse auch die Klasse Container, welche die Methode paint() enthält. Diese wird immer dann vom System aufgerufen, wenn ein Neuzeichnen des Appletfensters notwendig ist s. Buch S. 624ff Um in das Appletfenster zu zeichnen oder Text auszuschreiben, überschreibt man in der eigenen Appletklasse diese Methode und führt darin die gewünschten Aktionen aus Damit wir der paint() immer dann ausgeführt, wenn das System ein Neuzeichnen verlangt (systemgetriggertes Rendern) oder wenn das Programm repaint() aufruft Bei der Verwendung von JApplet (Swing) ist statt paint() die Methode paintComponent() zu verwenden. AppletEx1 AppletEx1 Das Applet wird mit einem Applet-Tag auf einer HTML-Seite aufgerufen. Dieses enthält einige Parameter (Appletklassendatei, Grösse des Fensters, usw.)

5 Learning By Doing AppletEx1 // AppletEx1.java import java.applet.*; import java.awt.*; public class AppletEx1 extends Applet { private int paintCounter; public void init() { paintCounter = 0; } public void paint(Graphics g) { paintCounter++; g.drawOval(0, 0, 400, 400); g.drawString("WBZ-1 \"Java im Unterricht\"", 130, 200); showStatus("paint: " + Integer.toString(paintCounter)); } Das erste Applet Compilieren HTML-Datei in gleiches Verzeichnis wie AppletEx1.class kopieren Editieren Mit Browser HTML-Datei laden. Internet Explorer: Mit Ctrl-Reload die neue Version holen Nummer zur Sicherstellung, dass richtige Version geladen ist Eventuell mit FTP auf Web-Server kopieren public void start() public void stop() public void destroy() überflüssig:

6 Learning By Doing AppletEx2 // AppletEx2.java import java.applet.*; import java.awt.*; public class AppletEx2 extends Applet { public void paint(Graphics g) { for (int i = 0; i < 100; i++) g.drawOval(i, i, i+10, i+10); } Das zweite Applet (auf den ersten Blick)Extrem einfach Erst vollständiges Bild sichtbar Analog wie bei Applikation main() aufgerufen wird, ist es hier paint(), aber auch jedesmal wenn Fenster zerstört wird Verständnis von extends nötig Gefährliche Applets einfach zu erstellen while (true) {}... oh je, der Browser hängt!

7 Learning By Doing AppletEx3 – 1. Teil // AppletEx3.java import java.applet.*; import java.awt.*; import java.awt.image.*; public class AppletEx3 extends Applet implements Runnable { private boolean isRunning = false; private BufferedImage bi; private Graphics2D g2D; public void init() { bi = new BufferedImage(401, 401, BufferedImage.TYPE_INT_RGB); g2D = bi.createGraphics(); g2D.setColor(Color.green); g2D.fillRect(0, 0, 401, 401); } public void start() { isRunning = true; new Thread(this).start(); } public void stop() { isRunning = false; } Das dritte Applet - 1. Teil Kann ein Thread sein (implementiert run-Methode)Doppelbufferung (Offscreen Buffer)Grapik-Kontext des BuffersHintergrundfarbe setzen (Löschen mit Rechteck) Thread startenRun-Flag setzen Run-Flag zurücksetzen

8 Learning By Doing AppletEx3 – 2. Teil Das dritte Applet – 2. Teil public void run() { while(isRunning) { for(int i = 0; i < ; i++) Math.sin(1); int x = (int)(500*Math.random()); int y = (int)(500*Math.random()); Color c = new Color((float)Math.random(), (float)Math.random(), (float)Math.random()); g2D.setColor(c); g2D.fillArc(x-100, y-100, 50, 50, 0, 360); repaint(); } public void paint(Graphics g) { g.drawImage(bi, 0, 0, null); } } run-LoopWartenschleife (unelegant)Kreise mit zufälliger FarbeAufforderung, paint() aufzurufenKopieren der Offscreen- Buffers auf Bildschirm paint-Methoderun-Methode des Threads Flacker, flacker,... warum? Component.update() löscht den Bildschirm und ruft paint() auf. update() überschreiben und paint() aufrufen, ohne zu löschen. public void update(Graphics g) { paint(g); }

9 Learning By Doing AppletEx3 – Ausführung Das dritte Applet – Ausführung Geschafft!

10 Learning By Doing AppletEx4 – GPanel APPLETFRAME // AppletEx4.java import javax.swing.*; import ch.aplu.util.*; public class AppletEx4 extends JApplet { GPanel p; public void start() { p = new GPanel(GPanel.APPLETFRAME); p.title("Java - exemplarisch"); p.window(0, 8, 0, 8); for (int i = 0; i < 8; i++) for (int j = 0; j < 8; j++) if ((i + j) % 2 == 0) p.fillRectangle(i, j, i + 1, j + 1); } Das vierte Applet – GPanel (APPLETFRAME) Eigenständiges Fenster AppletEx4 AppletEx4 AppletEx4.html jar-Datei muss im gleichen Verzeichnis seinKonstruktor mit speziellem ParameterGrösse durch GPanel gegeben

11 Learning By Doing AppletEx5 – GPanel EMBEDDED // AppletEx5.java import javax.swing.*; import ch.aplu.util.*; public class AppletEx5 extends JApplet implements Runnable { GPanel p; public void start() { p = new GPanel(GPanel.EMBEDDED); p.window(0, 8, 0, 8); getContentPane().add(p); new Thread(this).start(); } public void run() { for (int i = 0; i < 8; i++) for (int j = 0; j < 8; j++) if ((i + j) % 2 == 0) p.fillRectangle(i, j, i + 1, j + 1); } Das fünfte Applet – GPanel (EMBEDDED) AppletEx4 AppletEx4 AppletEx4.html Konstruktor mit speziellem ParameterGrösse in Pixel des Browsers Eingebettet im Browserfenster Keine Zeichenbefehle in start() Zeichnen im run() des Threads Hinzufügen zur ContentPane des Applets (Browserfenster)


Herunterladen ppt "Learning By Doing Client-Server Client-Server-Architektur Dünner Client-Dünner Server Dünner Client-Dicker Server Dicker Client-Dünner Server CGI, JSP,"

Ähnliche Präsentationen


Google-Anzeigen