Java2 1.5: Applets

  1. Belangrijk: Java-plugin test
  2. Inleiding
  3. Methoden
  4. Applets met Swing-componenten
  5. Applets in een browser tonen
  6. Documenten in de browser benaderen
  7. JFrame als popup
  8. Parameters meegeven aan Applets
  9. Interactie Java - Javascript
  10. Communicatie tussen Applets
  11. Bestanden laden vanuit een Applet
  12. Oefeningen

Java Plugin-test

Bezoek de testpagina om over een up-to-date versie van de Java Runtime Environment te beschikken.

Anders kan u problemen ondervinden bij het bekijken van de voorbeelden.

In de voorbeelden in de hoofdstuk gebruik ik enkel de tag Applet om Java-Applets in te voegen, er zijn echter zoals je verderop zal lezen andere manieren om dit te doen. Ik heb echter de voorbeeldcode bewust zo eenvoudig mogelijk gehouden, gelieve dus eerst deze testpagina te openen om te controleren of de juiste Java-plugin bij u is geïnstalleerd.

Controle uitgevoerd op minimaal versie 1.4 van de JRE, controlecode gegenereerd door Sun's HTMLConverter (zie verderop).

Inleiding

In dit hoofdstuk zullen we Applets van naderbij bestuderen. In de eerste hoofdstukken van de cursus heb je reeds kennis gemaakt met Applets. We maakten reeds een aantal eenvoudige Applets om de basisprincipes van Java te demonstreren. Nu leer je hoe je met Applets kan interageren met de webpagina, en zal je ook zien dat bij het gebruik van Applets de mogelijkheden van Java nauwer begrensd worden.

De klasse Applet maakt deel uit van het pakket java.applet en erft over van de klasse java.awt.Panel

Daar wij de GUI-Swing componenten hebben besproken zullen we in dit hoofdstuk gebruik maken van Applets die Swing-componenten ondersteunen. Deze Applets erven over van de klasse javax.swing.JApplet.

Methoden

Een subklasse van Applet of JApplet ondersteund standaard volgende methoden:

methode omschrijving
init Geladen bij het inistialiseren van de Applet: instructies om de Applet op te bouwen.
start Instructies die uitgevoerd worden wanneer de Applet geladen is: start van de uitvoering van de Applet
stop Wanneer het uitvoeren van de Applet wordt gestopt, bijvoorbeed wanneer de gebruiker een andere pagina bezoekt, of de browser sluit
destroy Opruimen vooraleer de Applet niet meer geladen is
paint Het tekenen van de Applet. Deze methode wordt door bepaalde gebruikersacties (zoals veranderen van het vensterformaat) of door de methode repaint opnieuw uitgevoerd.

Uit onderstaand voorbeeld kan je afleiden dat init gebeurt voor start.

Voorbeeld

We gebruiken een StringBuffer met de naam buffer om een tekenreeks te bewaren. Een StringBuffer ondersteund de handige methode append om tekens aan de StringBuffer toe te voegen.

In de methode nieuwItem tonen we de tekenreeks die we toevoegen in de console, voegen we de tekenreeks toe aan buffer en voeren we repaint uit, waardoor de methode paint opnieuw wordt uitgevoerd.

In de methode paint tekenen we een rand omheen de Applet en brengen we de inhoud van buffer op het scherm in de Applet.

We zorgen ervoor dat in de methoden init en start telkens een waarde wordt toegevoegd aan buffer.

import java.awt.*;

public class A1 extends javax.swing.JApplet {
    
    StringBuffer buffer;
    
    public void init() {
        buffer = new StringBuffer();
        nieuwItem("init...");
    }
    
    public void start(){
        nieuwItem("start...");
    }
    
    public void paint(Graphics g){
        //rand omheen de toepassing
        g.drawRect(0, 0, size().width - 1, size().height - 1);
        
        //inhoud van de StringBuffer op het scherm
        g.drawString(buffer.toString(), 5, 15);
    }
    
    private void nieuwItem(String nieuw){
        System.out.println(nieuw);
        buffer.append(nieuw);
        repaint();
    }
    
    private void initComponents() {

    }
    
    
    // Variables declaration - do not modify
    // End of variables declaration
    
}

Hier kan je gerust met een subklasse van Applet werken in plaats van JApplet, we gebruiken nog geen Swing-componenten.

Applets met Swing-componenten

Het toevoegen van Graphical User Interface (GUI) - componenten aan een Applet gebeurt standaard in de methode init.

De methode paint is niet meer nodig daar de GUI-componenten zichzelf tekenen.

Wanneer je de methode paint toch implementeert zullen de GUI-componenten niet meer getoond worden !

Voorbeeld

Bekijk de toepassing:
public class A2 extends javax.swing.JApplet {
    
    public void init() {
        initComponents();
        lst.addItem("Zeer leuk");
        lst.addItem("Leuk");
        lst.addItem("Niet leuk");
    }

    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jPanel3 = new javax.swing.JPanel();
        lst = new javax.swing.JComboBox();
        jPanel2 = new javax.swing.JPanel();
        lblRes = new javax.swing.JLabel();

        getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.Y_AXIS));

        jPanel1.setLayout(new java.awt.GridLayout(1, 2));

        jPanel1.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(20, 20, 20, 20)));
        jLabel1.setText("Werken met Applets is:");
        jPanel1.add(jLabel1);

        lst.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                lstActionPerformed(evt);
            }
        });

        jPanel3.add(lst);

        jPanel1.add(jPanel3);

        getContentPane().add(jPanel1);

        jPanel2.setBackground(new java.awt.Color(204, 255, 204));
        jPanel2.setBorder(new javax.swing.border.TitledBorder(""));
        jPanel2.add(lblRes);

        getContentPane().add(jPanel2);

    }

    private void lstActionPerformed(java.awt.event.ActionEvent evt) {
        lblRes.setText(lst.getSelectedItem().toString());
    }
    
    
    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JLabel lblRes;
    private javax.swing.JComboBox lst;
    // End of variables declaration
    
}

Applets in een browser tonen

JRE versie

Om Applets uit te voeren in een browser moet de computer van de gebruiker beschikken over de Java Virtual Machine. De JVM wordt geïnstalleerd wanneer je de Java Runtime Environment (JRE) installeert.

Laatste versie van de JRE ophalen

Om een Applet te bekijken kan je werken met de appletviewer van Sun, of met een webbrowser die Java-Applets ondersteund.

Applet

Om een Applet te tonen op een webpagina kan je de tag Applet in de HTML-code van de pagina invoegen. In het attribuut code geef je de naam van het .class-bestand op dat je wenst te gebruiken. Bestaat je toepassing uit meerdere .class-bestanden, dan geef je de naam op van de hoofdklasse (de klasse met de methode init). Later zal je leren hoe je ook met .jar-bestanden kan werken.

De attributen width en height staan toe de afmetingen van de Applet op de webpagina te bepalen.

<APPLET code="tekstapplet.class" 
		width="350"
		height="200">
Uw browser ondersteunt de Applet-tag niet
</APPLET>

Je kan de tag Applet niet gebruiken om automatisch een update van de JRE uit te voeren.

Object

De tag Object met het attribuut classid en eventueel codebase is bestemd voor gebruikers van Internet Explorer.

<OBJECT 
  classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
  codebase="http://java.sun.com/products/plugin/autodl/
           jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"
  width="200" height="200">
  <PARAM name="code" value="Applet1.class">
</OBJECT>

In het attribuut classid kan je definiëren welke versie van de Java plugin je wenst te gebruiken.

Met het attribuut codebase kan je opgeven waar de benodigde versie van de JRE kan worden gedownload.

Hier vind je een Lijst met de JRE-versies en de gekoppelde URL's.

Embed

Voor Mozilla browser wordt de tag embed gebruikt met het attribuut type en pluginspage.

<embed code="Applet1.class"
  width="200" height="200"
  type="application/x-java-applet;version=1.5.0"
  pluginspage="http://java.sun.com/j2se/1.5.0/download.html"/>

Cross-browser code:

<object 
  classid="clsid:CAFEEFAC-0015-0000-0000-ABCDEFFEDCBA"
  <param name="code" value="Applet1.class">
    <comment>
      <embed code="Applet1.class"
        type="application/x-java-applet;jpi-version=1.5.0">
        <noembed>
          No Java Support.
        </noembed>
      </embed>
    </comment>
  </object>

IE ondersteunt de tag object, negeert comment binnen de tag object.

Mozilla negeert de tag object met attribuut classid, interpreteert de inhoud van de tag comment.

HTML Converter

Na installatie van Java SDK op Windows staat in de bin-map (vb. C:\jdk1.5.0\bin) het programma HTMLConverter.exe. Met dit programma kan je een HTML-file met een Applet-tag een automatische inhoud voor cross-browser ondersteuning laten genereren.

De code bevat voor browsercontrole enkele Javascript-instructies.

Meer over de tags.

Documenten in de browser

Vanuit een Java-applet kan je documenten laten weergeven door de webbrowser.

Hiervoor gebruik je de methode showDocument van het object AppletContext. De AppletContext van een Applet kan je bereiken via de methode getAppletContext van de Applet.

De methode showDocument ontvangt 1 of 2 argumenten. Het eerste argument is de URL van de te openen webpagina, deze URL is een object van de klasse java.net.URL. Het tweede argument is een String met hierin de naam van het doelvenster:

Argumentwaarde Beschrijving
_blank Document opent in een nieuw venster
_self Document opent in het venster waarin de applet geladen is
_parent Document opent in het parent-frame, indien die niet aanwezig is, is dit hetzelfde als _self
_top Document opent in het hoofdvenster
vensternaam Document opent in het venster met de aangegeven naam

Voorbeeld: werken in frames

Applet met een keuzelijst, de gebruiker kan in de lijst een site aanduiden. Door een druk op een opdrachtknop wordt de gekoppelde site getoond in een toepassingsframe.

Bekijk de voorbeeldtoepassing:

A3.java

import java.net.*;
import javax.swing.*;

public class A3 extends javax.swing.JApplet {
    String links[] = {"IVO","SUN","Loempia"};
    URL urls[] = {
            maakURL("http://www.ivobrugge.be"),
            maakURL("http://java.sun.com"),
            maakURL("http://www.loempia.be")
    };
    
    public URL maakURL(String str){
       URL url = null;
            try {
                url = new URL(str);
            } catch (MalformedURLException e) {}
       return url;
    }
    
    public void init() {
        initComponents();
    }
    
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        lst = new JList(links);
        cmdSurf = new javax.swing.JButton();

        jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.Y_AXIS));

        jScrollPane1.setAlignmentX(0.0F);
        lst.setAlignmentX(0.0F);
        jScrollPane1.setViewportView(lst);

        jPanel1.add(jScrollPane1);

        cmdSurf.setText("Surf !");
        cmdSurf.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdSurfActionPerformed(evt);
            }
        });

        jPanel1.add(cmdSurf);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

    }

    private void cmdSurfActionPerformed(java.awt.event.ActionEvent evt) {

        getAppletContext().showDocument(urls[lst.getSelectedIndex()], "inhoud");
        
    }
    
    // Variables declaration - do not modify
    private javax.swing.JButton cmdSurf;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JList lst;
    // End of variables declaration
    
}

A3index.html
<html>
<head>
	<title>A3Index</title>
</head>
<frameset cols="200,*">
<frame src="A3.html">
<frame src="p1.html" name="inhoud">
</frameset
</html>


A3.html
<HTML>
<HEAD>
   <TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>
<P>
<APPLET code="A3.class" width=150 height=200></APPLET>
</P>
</BODY>
</HTML>

p1.html
<html>
<head>
	<title>Untitled</title>
</head>

<body>
Pagina1
</body>
</html>

Vanuit een JApplet kan je een JFrame openen, dit venster kan je als Java-popup gebruiken. Je kan natuurlijk ook werken met JOptionPane of JDialog.

We maken een toepassing waar de gebruiker in een tekstvak een naam van een werknemer kan ingeven. Door op een knop te drukken verschijnt in een popup-venster een lijst met werknemers. Door een item uit de lijst te kiezen wordt de lijst gesloten en wordt de naam getoond in het tekstvak.

We maken hier een toepassing bestaande uit twee klassen:

  1. een klasse A4 (gewoon omdat dit de vierde Applet uit dit hoofdstuk is), die overerft van JApplet: deze klasse bevat de initiële gebruikersinterface op de webpagina en bevat een label,een tekstvak en een knop
  2. een klasse Fwerknemer die overerft van JFrame: deze klasse vormt het popup venster en bevat als GUI een keuzelijst.

Om de werknemerlijst te tonen maken we een instantie aan van Fwerknemer en gebruiken we de methode setVisible(true) om het venster te tonen.

Om de lijst te verbergen gebruiken we de methode setVisible(false), om dit venster te vernietigen gebruiken we de methode dispose.

Deze toepassing bestaat uit meerdere klassen, in de html-code hoeven we in de Applet-tag enkel de naam van het initiële class-bestand op te geven (A4.class).

Parameters doorgeven aan een Applet

Soms is het interessant om vanuit een webpagina argumenten door te geven aan een Applet. Op deze manier kan je Applets maken die configureerbaar zijn.

Parameters meegeven

Een parameter kan je meegeven door een of meerdere param-tags op te nemen in de tag Applet. Deze param-tags geef je de attributen name en value: de naam van de parameter en de waarde die de parameter in de toepassing aanneemt.
<APPLET code="Param1.class" width=250 height=30>
<param name="tekst" value="Tekst vanuit HTML-argument">
</APPLET>

Parameters lezen

De methode getParameter uit de klasse Applet (overgeërfd door JApplet) stelt je in staat parameters te lezen. Deze parametes worden als String ingelezen, je zal in de Java-toepassing de nodige typecasting moeten uitvoeren wanneer je de parameter voor andere doeleinden wenst te gebruiken.

Wanneer de HTML-pagina de parameter waarnaar wordt gezocht niet bevat, dan retourneert getParameter de waarde null.

String tekst = getParameter("tekst");

Voorbeeld

In deze toepassing kan je een tekenreeks op het scherm brengen, de tekenreeks wordt aangegeven met behulp van een parameter. De gebruiker kan ook de achtergrondkleur en de voorgrondkleur met behulp van parameters instellen.

Het inlezen van de tekenreeks schept niet veel problemen daar deze waarde ingelezen wordt als String en ook als String wordt gebruikt.

Het inlezen van de kleuren zorgt voor wat extra code:

Bekijk de voorbeeldtoepassing:

Param1.html
<HTML>
<HEAD>
   <TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>

<H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3>

<P>
<APPLET code="Param1.class" width=250 height=30>
<param name="tekst" value="Tekst vanuit HTML-argument">
<param name="bgc" value="255,255,153">
<param name="fgc" value="153,0,0">
</APPLET>
</P>

<HR WIDTH="100%"><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
</BODY>
</HTML>


Param1.java
import java.awt.*;

public class Param1 extends javax.swing.JApplet {
    

    public void init() {
        initComponents();
        
         jPanel1.setBackground(Color.WHITE);
         
        String tekst = getParameter("tekst");
        if(tekst != null){
            lblBoodschap.setText(tekst);
        }
        
        String bgkleur = getParameter("bgc");
        try{
            jPanel1.setBackground(maakKleur(bgkleur));
        } catch (Exception e){
            jPanel1.setBackground(Color.WHITE);
        }
        
        String fgkleur = getParameter("fgc");
        try{
            lblBoodschap.setForeground(maakKleur(fgkleur));
        }catch(Exception e){
            jPanel1.setForeground(Color.BLACK);
        }
    }
    
   public Color maakKleur(String kleur){
       Color Nkleur = null;
       String rgb[] = kleur.split(",");
       if(rgb.length >= 3){
           Nkleur = new Color(Integer.parseInt(rgb[0]),Integer.parseInt(rgb[1]),Integer.parseInt(rgb[2]));
       }
       return Nkleur;
   }
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        lblBoodschap = new javax.swing.JLabel();

        jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));

        lblBoodschap.setText("Starttekst");
        jPanel1.add(lblBoodschap);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

    }
    
    
    // Variables declaration - do not modify
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel lblBoodschap;
    // End of variables declaration
    
}

Interactie Java - Javascript

Het is mogelijk vanuit een webpagina met behulp van Javascript Java-methoden in de Applet uit te voeren.

Omgekeerd is het ook mogelijk Javascript-opdrachten op de webpagina uit te voeren vanuit de Java-Applet.

Opgepast bij het werken met een browser: vaak worden Applets uit de cache geladen. Veelal moet je na een verandering in de Applet de tijdelijke internetbestanden verwijderen en de browser opnieuw starten.

Om dit mogelijk te maken gebruiken we een principt genoemd LiveConnect. Dit houdt concreet in dat we een attribuut mayscript met waarde mayscript toevoegen aan de tag Applet in de HTML-code van de webpagina.

<APPLET code="FJavascript.class"  mayscript="mayscript" 
width="350" height="200"></APPLET>

Javascript naar Java

De eenvoudigste communicatie is deze in de richting: Javascript naar Java.

Om te communiceren met een Applet geef je deze Applet in de HTML-tag een naam (met het attribuut name of id of beide):

<APPLET code="A5.class" name="testApplet" id="testApplet" width="250" height="100" mayscript="mayscript"></APPLET>

Vanuit Javascript kan je methoden van deze Applet uitvoeren door eerst een geldige referentie te leggen naar dit object. Dit kan je in de meeste browsers doen met de Javascript-functie getElementById.

Voorbeeld:

In dit voorbeeld passen we de tekst weergegeven in een Java-Applet aan met behulp van Javascript.

Bekijk het voorbeeld:

A5.java

public class A5 extends javax.swing.JApplet {
    
    public void init() {
        initComponents();
    }
    
    public void zetTekst(String tekst){
        lblTekst.setText(tekst);
    }
    
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        lblTekst = new javax.swing.JLabel();

        jPanel1.setBackground(new java.awt.Color(204, 255, 204));
        jPanel1.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder("Javascript - Java"), new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))));
        lblTekst.setText("Welkom op deze Java-Applet");
        jPanel1.add(lblTekst);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

    }
      
    // Variables declaration - do not modify
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel lblTekst;
    // End of variables declaration
}

A5.html
<HTML>
<HEAD>
   <TITLE>Communicatie Javascript - Java</TITLE>
<script type="text/javascript">
function veranderAppletTekst(nieuwetekst){
    var App = document.getElementById("testApplet");
    App.zetTekst(nieuwetekst);
}
</script>
</HEAD>
<BODY>

<h2>Communicatie Javascript - Java</h2>

<h3>De Java-Applet<h3>
<APPLET code="A5.class" name="testApplet" id="testApplet" width="250" height="100" mayscript="mayscript"></APPLET>

<h3>HTML-formulierelement met Javascript-actie<h3>
<input type="button" value="Verander Applettekst" onclick="veranderAppletTekst('Tekst aangepast vanuit Javascript')">

</BODY>
</HTML>

Java naar Javascript

Vanuit Java kan je Javascript-methoden toepassen of zelfs rechtstreeks Javascript opdrachten uitvoeren op de webpagina.

Deze functionaliteit werd ontworpen voor Netscape maar wordt nu door de meeste recente browsers ondersteund.

Vanuit Java kunnen we de webpagina benaderen met een bibliotheek die niet standaard in Java aanwezig is. Deze bibliotheek is afkomstig van Netscape.

Download het java-pakket: netscape.jar.

Als je een toepassing maakt zal je een verwijzing naar dit java-pakket moeten opnemen in de systeemvariabele CLASSPATH. Werk je met NetBeans IDE, dan kan je via rechtklik op filesystems kiezen voor mount > archive files, duidt netscape.jar aan. Nu krijgen we geen compileerfouten bij het maken van de toepassing.

Moderne browsers beschikken standaard over deze functionaliteiten, je hoeft het pakket dus niet mee te distribueren met je toepassing.

Het attribuut mayscript is niet noodzakelijk in bijvoorbeeld Internet Explorer, in Mozilla Firefox echter wel, dus beter dit attribuut ook voorzien in de tag Applet.

Een verwijzing naar de webpagina maak je in Java met een object van de klasse JSObject.

Een JSObject heeft een aantal methoden om de webpagina te manipuleren:

Methode Beschrijving
getWindow(Applet a) Legt een referentie naar het venster dat de Applet bevat In een Applet wordt dit gewoonlijk:
JSObject win = JSObject.getWindow(this);
call(String methodName, Object args[]) Voert een Javascript-methode uit met opgegeven parameterlijst
eval(String s) Voert een javascript-opdracht uit
getMember(String name) Legt een referentie naar een element van de webpagina, equivalent met this.name in Javascript
voorbeeld:
JSObject doc = (JSObject) win.getMember("document");
JSObject loc = (JSObject) doc.getMember("location");
setMember(String name, Object value) Stelt een element in op een opgegeven waarde
getSlot(int index) Legt een referentie naar een javascript Array-element, equivalent met this[index] in Javascript.
setSlot(int index, Object value) Stelt de waarde in van een javascript Array-element
removeMember(String name) Verwijdert een lid van een Javascript-object

Voorbeeld:

In een Java-Applet kan de gebruiker een tekst ingeven in een JTextField txtBericht.

Met behulp van een opdrachtknop kan de Javascript-functie toonBericht worden uitgevoerd, waardoor de inhoud van het tekstvak in een Javascript-alert wordt getoond.

Een tweede opdrachtknop stelt je in staat de inhoud van het tekstvak weer te geven in een HTML-divisie.

Bekijk de toepassing:

A6.java
import netscape.javascript.*;

public class A6 extends javax.swing.JApplet {
    

    public void init() {
        initComponents();
    }

    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        txtInvoer = new javax.swing.JTextField();

        jPanel1.setLayout(new java.awt.BorderLayout());

        jPanel1.setBackground(new java.awt.Color(255, 204, 204));
        jButton1.setText("Bericht in divisie");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jPanel1.add(jButton1, java.awt.BorderLayout.EAST);

        jButton2.setText("Bericht in Javascript alert");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jPanel1.add(jButton2, java.awt.BorderLayout.WEST);

        jPanel2.setBackground(new java.awt.Color(255, 204, 204));
        jPanel2.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder("Geef een bericht in"), new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))));
        txtInvoer.setText("Tik hier een bericht in");
        jPanel2.add(txtInvoer);

        jPanel1.add(jPanel2, java.awt.BorderLayout.NORTH);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        JSObject win = JSObject.getWindow(this);  
        win.eval("document.getElementById('divbericht').innerHTML='" +txtInvoer.getText() +"';");
    }

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        JSObject win = JSObject.getWindow(this); 
        Object args[] = { txtInvoer.getText() };
        win.call("toonBericht" , args);
    }
    
    
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JTextField txtInvoer;
    // End of variables declaration
    
}

A6.html
<HTML>
<HEAD>
   <TITLE>Interactie Java - Javascript</TITLE>
<style type="text/css">
.test {
    width:200px;
    height:50px;
    border:solid 1px;
    background-color:#CCCCFF;
}
</style>
<script type="text/javascript">
function toonBericht(bericht){
    alert(bericht);
}
</script>
</HEAD>
<BODY>

<H2>Interactie Java - Javascript</H2>
<h3>De Java-Applet:</h3>
<P>
<APPLET code="A6.class" width="350" height="100" mayscript="mayscript"></APPLET>
</P>

<h3>Een html-divisie:</h3>
<div class="test" id="divbericht">Tekst vanuit html-pagina</div>
</BODY>
</HTML>

Meer bij Sun
Meer over JSObject (en JSException en Nescape.plugin.plugin)

Communicatie tussen Applets

Wanneer je meerdere Applets op een webpagina gebruikt kan je deze laten communiceren met elkaar.

In NetBeans IDE maak je hiervoor een project met twee JApplet-forms. Door te werken in 1 project krijg je geen foutmeldingen bij verwijzingen tussen de Applets.

Bij het uitvoeren van elk van deze Applets maakt NetBeans IDE echter automatisch een HTML-pagina voor elk van deze Applets. Een van de pagina's heb je niet nodig, voeg een tweede Applet-tag toe aan de pagina voor de eerste Applet.

De methode getApplet van de klasse AppletContext stelt je in staat een referentie naar een andere Applet op te bouwen (de methode getApplets retourneert een lijst met alle applets op een pagina).

Voorbeeld

De communicatie tussen twee Applets kan gemakkelijkst ingezien worden aan de hand van een voorbeeld:

Hier stuurt de Applet met naam zender een tekstbericht naar de Applet met naam ontvanger. Deze Applets zijn in Java gecompileerd in respectievelijk A7.class en A8.class.

Bekijk het voorbeeld:

A7.java
import java.applet.*;
import javax.swing.*;

public class A7 extends javax.swing.JApplet {
    

    public void init() {
        initComponents();
    }
    
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        txtBericht = new javax.swing.JTextField();

        jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));

        jPanel1.setBackground(new java.awt.Color(204, 255, 204));
        jPanel1.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder("Verstuur een bericht naar A8"), new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))));
        jLabel1.setText("Stuur bericht naar A8: ");
        jPanel1.add(jLabel1);

        txtBericht.setText("Tik hier je bericht");
        txtBericht.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtBerichtActionPerformed(evt);
            }
        });

        jPanel1.add(txtBericht);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

    }

    private void txtBerichtActionPerformed(java.awt.event.ActionEvent evt) {
        Applet ontvanger = null;
        String ontvangerNaam = "ontvanger";
        
        // Een referentie naar de ontvanger Applet
        ontvanger = getAppletContext().getApplet(ontvangerNaam);
        
        // naam van de zender-Applet
        String zenderNaam = getParameter("name");
        
        // typecasten naar klasse van ontvanger om de methode van de ontvanger-klasse te kunnen gebruiken
        ((A8)ontvanger).ontvangBericht(zenderNaam,txtBericht.getText()); 
    }
    
    
    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField txtBericht;
    // End of variables declaration
    
}


A8.java
import java.applet.*;

public class A8 extends javax.swing.JApplet {
    

    public void init() {
        initComponents();
    }
    
    public void ontvangBericht(String zender,String bericht){
        lblBericht.setText("Bericht onvangen van " +zender +": " +bericht);
    }
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        lblBericht = new javax.swing.JLabel();

        jPanel1.setBackground(new java.awt.Color(255, 204, 204));
        jPanel1.setBorder(new javax.swing.border.TitledBorder("Ontvang bericht"));
        lblBericht.setText("Nog geen bericht ontvangen");
        jPanel1.add(lblBericht);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

    }
    
    
    // Variables declaration - do not modify
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel lblBericht;
    // End of variables declaration
    
}

A7.html
<HTML>
<HEAD>
   <TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>

<h2>Communicatie tussen Applets</h2>

<h3>Zender-Applet</h3>
<P>
<APPLET code="A7.class" width="350" height="100" name="zender"></APPLET>
</P>

<h3>Ontvanger-Applet</h3>
<P>
<APPLET code="A8.class" width="350" height="100" name="ontvanger"></APPLET>
</P>

</BODY>
</HTML>

Bestanden laden vanuit een Applet

Nog in ontwikkeling...

Oefeningen

Oefeningen

Meer tutorials:
leer ook: html | xhtml | css | asp | asp.net | c# | ado.net | linq | ajax | java | javascript
Valid HTML 4.01! Valid CSS! © - Cursusweb