Was sind Applets? - Universität Paderborn

Werbung
Universität Paderborn
Prof. Dr. Stefan Böttcher
Kapitel 3:
Java Applets
Grundlagen der Programmierung 2, SS 2008
1
Universität Paderborn
Prof. Dr. Stefan Böttcher
Was sind Applets?
kleine in Fenstern ausführbare Programme
typisch: Aufruf im Browserfenster als Teil einer HTML-Seite
<html>
<head> … </head>
<body>
Anfang des umgebenden HTML-Textes
<applet code="Applet1.class" width="600" height="400">
</applet>
Ende des umgebenden HTML-Textes
</body>
</html>
Grundlagen der Programmierung 2, SS 2008
2
Universität Paderborn
Prof. Dr. Stefan Böttcher
Beispiel 1: Applet1.html
<html>
<head>
<title>Main</title>
</head>
<body>
<hr>
Ein Applet, das Werte des Textfeldes beim Auslösen eines
ActionEvents, z.B. durch Drücken der Enter-Taste, in die TextArea
übernimmt
<p>
<applet code="Applet1.class" width="600" height="400">
</applet>
</p>
<hr>
</body>
</html>
Grundlagen der Programmierung 2, SS 2008
3
Universität Paderborn
Prof. Dr. Stefan Böttcher
Beispiel 1: Applet1.java (1)
public class Applet1 extends JApplet {
private JTextField tfIO;
private JTextArea taOutput;
public void init() { // wird 1x beim starten gerufen
tfIO = new JTextField("pc600");
taOutput = new JTextArea("");
taOutput.setEditable(false);
Container cp = getContentPane();
cp.add(tfIO, BorderLayout.NORTH);
cp.add(taOutput, BorderLayout.CENTER);
tfIO.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateText();
}
});
updateText();
}…
}
Grundlagen der Programmierung 2, SS 2008
4
Universität Paderborn
Prof. Dr. Stefan Böttcher
Beispiel 1: Applet1.java (2)
public class Applet1 extends JApplet {
private JTextField tfIO;
private JTextArea taOutput;
public void init() { …
tfIO.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateText();
}
});
updateText();
}
public void updateText() {
private String ausgabe = "\nHallo sagt\nIhr Applet\n";
ausgabe += tfIO.getText();
taOutput.setText(ausgabe); // in die TextArea schreiben
}
}
Grundlagen der Programmierung 2, SS 2008
5
Universität Paderborn
Prof. Dr. Stefan Böttcher
Typische Verwendung der Applet-Methoden
können in Applets (Unterklassen von JApplet) neu definiert werden.
class meinApplet extends JApplet
{
public void init() { ... } // wird 1x beim Laden des Applets aufgerufen
// darin definiert man GUI-Komponenten und Listener
public void start() { ... } // wird beim 1. Lauf des Applets aufgerufen
// darin startet man Anwedungen (Threads)
public void paint( Graphics g ) { ... }
// wird bei jedem Neuzeichnen des Applets aufgerufen
// darin zeichnet man Diagramme etc.
}
Grundlagen der Programmierung 2, SS 2008
6
Universität Paderborn
Prof. Dr. Stefan Böttcher
In Applets Oberflächen gestalten
Da JApplet eine Unterklasse von Panel ist, kann man wie bei andern SwingKomponenten auch GUI-Komponenten hinzufügen
(Buttons, Labels, Edit-Felder, …) und dieselben Events behandeln in
public void init() { ... } // wird 1x beim Laden des Applets aufgerufen
// darin definiert man GUI-Komponenten und Listener
Wie in Swing kann man auf die Zeichenfläche von Applets zeichnen in
public void paint( Graphics g ) { ... }
// wird bei jedem Neuzeichnen des Applets aufgerufen
// darin zeichnet man Diagramme etc.
Grundlagen der Programmierung 2, SS 2008
7
Parameterübergabe an Applets (1)
Universität Paderborn
Prof. Dr. Stefan Böttcher
<html>
<head>
<title>Applet mit Parametern</title>
</head>
<body>
<hr>
Wir setzen Parameter filiale="Frankfurt am Main"
<p>
<applet code="Applet4.class" width="400" height="200">
<param name="filiale" value="Frankfurt am Main">
</applet>
</p>
<hr>
</body>
</html>
Applet4.html
Grundlagen der Programmierung 2, SS 2008
8
Parameterübergabe an Applets (2a)
Universität Paderborn
Prof. Dr. Stefan Böttcher
import java.awt.event.ActionListener; import javax.swing.*;
public class Applet4 extends JApplet {
private JTextField tf;
private JTextArea anzeige;
public void init() { // wird 1x beim starten gerufen
... // Oberfläche konstruieren Æ siehe nächste Folie
String filialort = getParameter("filiale"); // Parameter
tf.setText( filialort ) ;
// in Textfeld schreiben
updateText();
}
private void updateText() {
String ausgabe =
"\nKaufen Sie am besten direkt in unserer Filiale\n";
ausgabe += tf.getText();
anzeige.setText(ausgabe); // in die TextArea schreiben
}
}
Grundlagen der Programmierung 2, SS 2008
Applet4.java
9
Parameterübergabe an Applets (2b)
Universität Paderborn
Prof. Dr. Stefan Böttcher
public void init() { // wird 1x beim starten gerufen
JLabel l = new JLabel("Ihr Wohnort: "); // Label anlegen
tf = new JTextField("");
// Textfeld anlegen
anzeige = new JTextArea("");
// TextArea anlegen
anzeige.setEditable(false);
// TextArea nichteditierbar
JPanel panel = new JPanel();
// Panel anlegen
panel.setLayout(new FlowLayout());
// Panel-Layout festlegen
panel.add(l);
// Label aufs Panel
panel.add(tf);
// Textfeld aufs Panel
Container cp = getContentPane();
// Applet-Container holen
cp.add(panel, BorderLayout.NORTH);
// Panel auf den Container
cp.add(anzeige, BorderLayout.CENTER);
// TextArea zum Container
tf.addActionListener(new ActionListener() { // tf soll reagieren
public void actionPerformed(ActionEvent e) { // auf Return
updateText();
// mit updateText();
}
//
});
// Ende anonyme Klasse
String filialort = getParameter("filiale"); // Parameter abfragen
tf.setText( filialort ) ;
// u. in Textfeld schreiben
updateText();
}
Applet4.java
Grundlagen der Programmierung 2, SS 2008
10
Universität Paderborn
Prof. Dr. Stefan Böttcher
Applets und Threads
Threads sind leichtgewichtige Prozesse, die nebenläufig zu anderen Threads
abgearbeitet werden können (Æ mehr dazu in einem Extra-Kapitel)
In Applets können Threads gestartet werden in:
class meinApplet extends JApplet
{
public void start(){…} // wird beim 1. Lauf des Applets aufgerufen
// darin startet man Anwedungen (Threads)
}
Ein Thread führt, während er läuft, seine run()-Methode aus.
Laufende Threads können u.a. eine Zeit lang angehalten werden, z.B.
sleep(500) ;
Grundlagen der Programmierung 2, SS 2008
// Thread wartet 500 ms
11
Universität Paderborn
Prof. Dr. Stefan Böttcher
Applets und Threads - Beispiel (1)
import java.awt.* ;
import javax.swing.JApplet ;
public class SE6 extends JApplet
{
public void init() {
MyT myt = new MyT(getGraphics()) ;
myt.start();
// 1x bei Initialisierung
// im neuangelegten Thread
// Graphik übergeben
// starte angelegten Thread
}
class MyT extends Thread
{ Graphics ag ;
MyT( Graphics g ) { ag=g ; }
public void run()
{ ... }
// definiert Thread
// Graphik lokal speichern
// im Thread-Kontruktor
// Graphik übernehmen
// wenn Thread läuft, tue ...
}
}
Grundlagen der Programmierung 2, SS 2008
12
Universität Paderborn
Prof. Dr. Stefan Böttcher
Applets und Threads - Beispiel (2)
class MyT extends Thread
// definiert Thread
{
Graphics ag ;
MyT( Graphics g ) { ag=g ; } // übernehme Zeichenfläche
public void run()
// wenn Thread läuft, tue folgendes:
{
int x=200, y=200 ;
while (true)
try {
sleep(500) ;
// Thread wartet 500 ms
x+=10 ; y+=10 ;
repaint() ;
// neu zeichnen
ag.drawRect( 100, 100, x, y ) ;
ag.drawOval( 100, 100, x, y ) ;
}
catch ( InterruptedException e ) { } // unterbrochen?
}
}
Grundlagen der Programmierung 2, SS 2008
13
Universität Paderborn
Prof. Dr. Stefan Böttcher
Zusammenfassung Applets
Applets sind kleine in Fenstern ausführbare Programme
typisch: Aufruf im Browserfenster als Teil einer HTML-Seite
man kann (wie bei andern Swing-Komponenten auch)
GUI-Komponenten hinzufügen
(Buttons, Labels, Edit-Felder, …)
und dieselben Events behandeln
man kann in der init-Methode von Applets
(wie in anderen Programmen auch)
Threads erzeugen und Thread starten
Grundlagen der Programmierung 2, SS 2008
14
Herunterladen