Java/Applet: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
(N - importiert; aktualisiert)
 
(akt)
Markierung: 2017-Quelltext-Bearbeitung
 
Zeile 1: Zeile 1:
Ein '''Java-Applet''' ist ein Computerprogramm, das mittels [[Java]]-Technologie erstellt und normalerweise in einem Webbrowser ausgeführt wird. Applets wurden eingeführt, um Programme in Webseiten ablaufen lassen zu können, die im Webbrowser (auf der Client-Seite) arbeiten und direkt mit dem Benutzer interagieren können, ohne Daten zum Server senden zu müssen. Java-Applets waren Ende der 1990er Jahre mit ein Grund für den Erfolg und die schnelle Verbreitung von Java.
Ein '''Java-Applet''' ist ein Computerprogramm, das mittels [[Java]]-Technologie erstellt und normalerweise in einem Webbrowser ausgeführt wird. Applets wurden eingeführt, um Programme in Webseiten ablaufen lassen zu können, die im Webbrowser (auf der Client-Seite) arbeiten und direkt mit dem Benutzer interagieren können, ohne Daten zum Server senden zu müssen. Java-Applets waren Ende der 1990er Jahre mit ein Grund für den Erfolg und die schnelle Verbreitung von Java.


== Sicherheit ==
 
{{Achtung|Applets werden auf dem Rechner des Anwenders ausgeführt und stellen daher - wie jedes lokal ausführbare Programm - ein Sicherheitsrisiko dar. Da die Applets in einer abgeschotteten Laufzeitumgebung ({{wpde|Sandbox}}) laufen, ist dieses Risiko jedoch gut kontrollierbar. Ein Sicherheitsrisiko durch "böswillige" Applets besteht nur, wenn die Sandbox fehlerhaft ist.  
{{Achtung|Applets werden auf dem Rechner des Anwenders ausgeführt und stellen daher - wie jedes lokal ausführbare Programm - ein Sicherheitsrisiko dar. Da die Applets in einer abgeschotteten Laufzeitumgebung ({{wpde|Sandbox}}) laufen, ist dieses Risiko jedoch gut kontrollierbar. Ein Sicherheitsrisiko durch "böswillige" Applets besteht nur, wenn die Sandbox fehlerhaft ist.  


Zeile 11: Zeile 11:




==Kennzeichen von Applets==
== Kennzeichen von Applets ==
Sie verfügen unter anderen über die folgenden Methoden:  
Sie verfügen unter anderen über die folgenden Methoden:  
  init() - wird genau einmal aufgerufen, wenn das Applet erstmals in den Browser geladen wird.  
  init() - wird genau einmal aufgerufen, wenn das Applet erstmals in den Browser geladen wird.  
Zeile 20: Zeile 20:
* nach http://de.wikipedia.org/wiki/Java-Applet , 03.05.2006
* nach http://de.wikipedia.org/wiki/Java-Applet , 03.05.2006


==Beispiel 1==
=== Beispiel 1 ===
Ein einfaches Beispiel HalloWelt.java (hier wird nur paint() überschrieben um gezielt ab der Stelle 100,100 den Text ausgeben zu können):
Ein einfaches Beispiel HalloWelt.java (hier wird nur paint() überschrieben um gezielt ab der Stelle 100,100 den Text ausgeben zu können):
<source lang="java">
<source lang="java">
Zeile 33: Zeile 33:
}   
}   
</source>
</source>
* Quelltext aus: http://de.wikibooks.org/wiki/Java_Standard:_Applets
 


{{Übung|
{{Übung|
Testen Sie das Applet. Ändern Sie Text und Position der Ausgabe. Fügen Sie eine zweite Ausgabe hinzu.}}
Testen Sie das Applet. Ändern Sie Text und Position der Ausgabe. Fügen Sie eine zweite Ausgabe hinzu.}}


==Shapes==
=== Shapes ===
Die Schnittstelle um graphische Objekte wie Shapes, oder aber auch Bilder zu zeichnen, ist in Java das Graphics-Objekt.  
Die Schnittstelle um graphische Objekte wie Shapes, oder aber auch Bilder zu zeichnen, ist in Java das Graphics-Objekt.  


Zeile 57: Zeile 57:
* http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Graphics.html
* http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Graphics.html


==Ein Haus==
=== Ein Haus ===
<source lang="java">
<source lang="java">
import java.awt.*;
import java.awt.*;
Zeile 74: Zeile 74:
</source>
</source>
{{Übung|
{{Übung|
#Setzen Sie dem Haus eine Schornstein und ergänzen Sie ein Fenster und eine Sonne.
#Setzen Sie dem Haus einen Schornstein und ergänzen Sie ein Fenster und eine Sonne.
#Zeichnen Sie als Übung zur Grafik ein beliebiges Bild.
#Zeichnen Sie als Übung zur Grafik ein beliebiges Bild.
}}
}}


==Zufallsfigur==
=== Zufallsfigur ===
<source lang="java">
<source lang="java">
import java.awt.*;
import java.awt.*;
Zeile 107: Zeile 107:
}}
}}


==Applets und Threads==
=== Applets und Threads===  
„Nebenläufigkeit (concurrency) ist die Fähigkeit eines Systems zwei oder auch mehrere Aufgaben (scheinbar) gleichzeitig auszuführen. In Java kann die Ausführungsparallelität innerhalb eines Programmes mittels Threads (lightweight processes) erzwungen werden.“
„Nebenläufigkeit (''concurrency'') ist die Fähigkeit eines Systems zwei oder auch mehrere Aufgaben (scheinbar) gleichzeitig auszuführen. In Java kann die Ausführungsparallelität innerhalb eines Programmes mittels Threads (lightweight processes) erzwungen werden.“
* http://de.wikibooks.org/wiki/Java_Standard:_Threads
* http://de.wikibooks.org/wiki/Java_Standard:_Threads


Zeile 170: Zeile 170:
}}
}}


==GUI und Applet==
== GUI und Applet ==
Kaum ein modernes Programm kommt heutzutage ohne eine ansprechende GUI aus. Daher hier nun ein Beispiel, wie man mit Beschriftungen und Buttons in Java umgeht.
Kaum ein modernes Programm kommt heutzutage ohne eine ansprechende [[Java/GUI|GUI]] aus. Daher hier nun ein Beispiel, wie man mit Beschriftungen und Buttons in Java umgeht.


Grobe Erklärung der Funktionsweise: Ein neuer Button wird angelegt. Dieser bekommt einen ActionListener zugewiesen. Der sorgt dafür, dass actionPerformed aufgerufen wird, wenn der Button gedrückt ist. Da man manchmal mehrere Elemente hat, prüft man mit if (evt.getSource() == button), ob das ActionEvent „evt“ auch wirklich vom Button button stammt.
Grobe Erklärung der Funktionsweise: Ein neuer Button wird angelegt. Dieser bekommt einen ActionListener zugewiesen. Der sorgt dafür, dass actionPerformed aufgerufen wird, wenn der Button gedrückt ist. Da man manchmal mehrere Elemente hat, prüft man mit if (evt.getSource() == button), ob das ActionEvent „evt“ auch wirklich vom Button button stammt.
Zeile 221: Zeile 221:
Vertiefend:
Vertiefend:
* http://de.wikibooks.org/wiki/Java_Standard:_Grafische_Oberfl%C3%A4chen_mit_AWT#Texteingabefelder  
* http://de.wikibooks.org/wiki/Java_Standard:_Grafische_Oberfl%C3%A4chen_mit_AWT#Texteingabefelder  
* docs.oracle: [https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html  java.awt Class Graphics]


<source lang="java">
<source lang="java">
Zeile 270: Zeile 271:


[[Kategorie:Java]]
[[Kategorie:Java]]
[[Kategorie:Unterrichtsidee]]
[[Kategorie:Informatik]]

Aktuelle Version vom 19. August 2019, 05:46 Uhr

Ein Java-Applet ist ein Computerprogramm, das mittels Java-Technologie erstellt und normalerweise in einem Webbrowser ausgeführt wird. Applets wurden eingeführt, um Programme in Webseiten ablaufen lassen zu können, die im Webbrowser (auf der Client-Seite) arbeiten und direkt mit dem Benutzer interagieren können, ohne Daten zum Server senden zu müssen. Java-Applets waren Ende der 1990er Jahre mit ein Grund für den Erfolg und die schnelle Verbreitung von Java.


Achtung

Applets werden auf dem Rechner des Anwenders ausgeführt und stellen daher - wie jedes lokal ausführbare Programm - ein Sicherheitsrisiko dar. Da die Applets in einer abgeschotteten Laufzeitumgebung (SandboxWikipedia-logo.png) laufen, ist dieses Risiko jedoch gut kontrollierbar. Ein Sicherheitsrisiko durch "böswillige" Applets besteht nur, wenn die Sandbox fehlerhaft ist.

Google Chrome hat seit Version 45 (September 2015); Firefox seit Version 52 (März 2017) Java-Applets deaktiviert. Die Applet-Technologie wird künftig aus Java entfernt.

Oracle empfiehlt stattdessen Web Start Applications zu programieren.



Kennzeichen von Applets

Sie verfügen unter anderen über die folgenden Methoden:

init() - wird genau einmal aufgerufen, wenn das Applet erstmals in den Browser geladen wird. 
start() - wird jedesmal aufgerufen, wenn das Applet sichtbar wird. 
paint(...) - Zeichenmethode für die Anzeigefunktionen des Applet 
stop() - wird jedesmal aufgerufen, wenn das Applet verdeckt wird, z.B. weil das Browser-Fenster von einem anderen Fenster überdeckt wird. 
destroy() - wird aufgerufen, wenn das Applet aus dem Hauptspeicher entladen wird. 

Beispiel 1

Ein einfaches Beispiel HalloWelt.java (hier wird nur paint() überschrieben um gezielt ab der Stelle 100,100 den Text ausgeben zu können):

import java.awt.*;
import java.applet.Applet; 
public class HalloWelt extends Applet 
{            
   public void paint( Graphics g ) 
   {
       g.drawString( "Mein erstes Java-Applet!",100,100 );    // Grafik-Text
   }                                             
}


Übung
Testen Sie das Applet. Ändern Sie Text und Position der Ausgabe. Fügen Sie eine zweite Ausgabe hinzu.


Shapes

Die Schnittstelle um graphische Objekte wie Shapes, oder aber auch Bilder zu zeichnen, ist in Java das Graphics-Objekt.

Ausgabe eines Strings:

  • g.drawString( "Mein erstes Java-Applet!",100,100 );

Ausgabe eines Strings mit anderem Zeichensatz und Farbe

  • g.setFont(new Font("Dialog", Font.PLAIN, 18));
  • g.setColor(Color.BLUE);
  • g.drawString("Hallo Welt", 10,40);

Ausgabe eines ausgefüllten abgerundeten Rechtecks

  • g.fillRoundRect(startX,startY,breite,hoeher,radiusAbrundungX,radiusAbrundungY);

Zum Beispiel:

  • g.fillRoundRect(50,70,20,30,10,20);

aus: http://de.wikibooks.org/wiki/Java_Standard:_Das_Graphics_Object

In der offiziellen Java-Dokumentation finden Sie alle Methoden der Klasse Graphics hier:

Ein Haus

import java.awt.*;
import java.applet.Applet; 
public class HalloWelt extends Applet 
{            
   public void paint( Graphics g ) 
   {
       g.setColor(Color.BLUE);
       g.drawRect(100,150,200,100);
       g.setColor(Color.RED);
       g.drawLine(100,150,200,50);
       g.drawLine(300,150,200,50);
    }                                             
}
Übung
  1. Setzen Sie dem Haus einen Schornstein und ergänzen Sie ein Fenster und eine Sonne.
  2. Zeichnen Sie als Übung zur Grafik ein beliebiges Bild.


Zufallsfigur

import java.awt.*;
import java.applet.Applet;
import java.util.Random;
public class Zufallsfigur extends Applet 
{
    private static final Random rand = new Random();
    public void paint( Graphics g ) 
    {
        g.setColor(Color.BLUE);
        for (int i = 1; i <= 1000; i++)
        {
            g.setColor(Color.RED);
            g.drawString(""+rand.nextInt(500), i*10,i*10);
            g.setColor(Color.BLUE);
            g.drawLine(rand.nextInt(500),
                       rand.nextInt(500),
                       rand.nextInt(500),
                       rand.nextInt(500));
        }
    }                                             
}
Übung
  1. Mathematische Aufgabe: Warum liegen in der Mitte des Bildes mehr blaue Halme als außen?
  2. Entwerfen Sie ein Zufallsbild mit Kreisen.


Applets und Threads

„Nebenläufigkeit (concurrency) ist die Fähigkeit eines Systems zwei oder auch mehrere Aufgaben (scheinbar) gleichzeitig auszuführen. In Java kann die Ausführungsparallelität innerhalb eines Programmes mittels Threads (lightweight processes) erzwungen werden.“

Das folgende Applet zeichnet alle halbe Sekunde 5 Linien auf den Bildschirm.

import java.awt.*;
import java.applet.Applet;
import java.util.Random;
public class ZufallsfigurMitThread extends Applet implements Runnable
{  
    Thread thread;
    private static final Random rand = new Random();
     
    public void init()
    {
        thread= new Thread(this); // thread ist ein neuer Thread dieses Applets
        thread.start(); // starte den Thread
    }  

    public void destroy()
    {
        thread = null; // Beim Verlassen des Applets setze den Thread auf null
    } 
    
    public void run()
     {
          while (true) // solange true, also immer
          {    
               repaint(); // rufe paint auf 
               try // und versuche, 500 Millisekunden zu warten
               {
                   Thread.sleep(500);
               }
               catch (InterruptedException e) // wenn das mit dem Warten nicht geklappt hat, 
               {
                    System.out.println(e); // dann gib einen Fehler aus.
               }
          }

     } 
    
    public void paint( Graphics g ) 
    {
       g.setColor(Color.BLUE);
       for (int i = 1; i <= 5; i++)
       {
           g.setColor(Color.BLUE);
           g.drawLine(rand.nextInt(500),
                      rand.nextInt(500),
                      rand.nextInt(500),
                      rand.nextInt(500));
       }
    }                                             
}


Übung
  1. Ändern Sie die Geschwindigkeit, die Farbe und die Anzahl der Linien.
  2. Entwerfen Sie eine eigene Zufallsgrafikenanimation.


GUI und Applet

Kaum ein modernes Programm kommt heutzutage ohne eine ansprechende GUI aus. Daher hier nun ein Beispiel, wie man mit Beschriftungen und Buttons in Java umgeht.

Grobe Erklärung der Funktionsweise: Ein neuer Button wird angelegt. Dieser bekommt einen ActionListener zugewiesen. Der sorgt dafür, dass actionPerformed aufgerufen wird, wenn der Button gedrückt ist. Da man manchmal mehrere Elemente hat, prüft man mit if (evt.getSource() == button), ob das ActionEvent „evt“ auch wirklich vom Button button stammt.

Vertiefend:

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet; 
public class GUI_1 extends Applet implements ActionListener
{  
    Label label;
    Button button;
    int anzahl;
    
    public void init()
    {
        button = new Button("Schaltfläche");
        button.addActionListener(this);
        add (button);
        
        label = new Label("Du hast kein mal gedrückt");  
        add(label);
    }  

    
    public void actionPerformed(ActionEvent evt) 
    {
         if (evt.getSource() == button) {
              anzahl++;
              label.setText("Du hast "+anzahl+" mal gedrückt");
              repaint();
         }
    } 
                                           
}
Übung
  1. Legen Sie ein zweites Label an, was anzeigt, wie oft man noch drücken muss, bis 100 erreicht ist.
  2. Legen Sie einen zweiten Button an, der herunterzählen lässt.


Textfeld

Die folgende Klasse verwendet neben Buttons und Labels auch Textfelder. In diesen können Benutzer Eingaben tätigen, die mit getText() abgefragt werden können. setText(...) ändert den Text.

Vertiefend:

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet; 
public class GUI_2 extends Applet implements ActionListener
{  
    Label label;
    Button button;
    TextField textfield;
    int anzahl;
    
    public void init()
    {   
        textfield = new TextField("niemand");
        add (textfield);
        button = new Button("Begrüße");
        button.addActionListener(this);
        add (button);
        
        label = new Label("Ich kenne dich nicht!");  
        add(label);
    }  

    
    public void actionPerformed(ActionEvent evt) 
    {
         if (evt.getSource() == button) {
              label.setText("Hallo "+textfield.getText());
              repaint();
         }
    } 
                                           
}

Textarea

Mehrzeilige Texteingabefelder können Sie mit der Klasse TextArea erstellen. Zusätzlich zu dem Anfangstext gibt man beim Anlegen noch die Zeilenanzahl und die Breite in Buchstaben an. Hinweis: \n wechselt im TextArea die Zeile, führt aber z.B. in einzeiligen Labels zu Problemen!

textarea = new TextArea("Hallo Welt!\nWo bist du?", 5,30));

Weitere GUI-Elemente

Wie Menus, Radiobuttons, Listen etc. sowie Tipps zum Layout finden Sie hier: