Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/104/sda/2/7/j.mochel/bdd/fonctions.php on line 213

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/104/sda/2/7/j.mochel/bdd/fonctions.php on line 213
Applet Java - Tutorial


Réaliser une applet Java suppose que vous soyez familier avec la programmation en Java, en particulier la classe Frame et les bibliothèques graphiques AWT.

Cette page est un résumé de ce que j'ai compris en créant mes applet et parcourant la documentation ; cela ne vaut peut-être pas les documentations complètes et rigoureuses qu'on doit pouvoir trouver sur le web ou dans le commerce, mais suffit pour simplement mettre en ligne une application Java.

Une applet Java se construit sur le modèle suivant :

import java.awt.*;
import java.awt.event.*
import java.applet.*;

public class MaClasse extends Applet{
     public void init(){...}
     public void start(){...}
     public void paint(Graphics g){...}
}

Les 3 premières lignes servent à importer les bibliothèques Java nécessaires : la bibliothèque applet et des bibliothèques AWT qui servent à créer les composants graphiques (bouton, liste, zone de texte, ...) et à intercepter les événements (clic sur un bouton, ...).

La classe "graphique", celle qui est hérite de Frame dans un simple programme java, doit maintenant hériter de Applet.
Il n'y a pas besoin de constructeur, ni de fonction main. Cette classe peut bien sûr avoir des champs, des méthodes statiques et implémenter des interfaces comme n'importe quelle classe.

Les arguments de la ligne de commande sont récupérés par la fonction String getParameter(String var_name).

Lors du chargement de l'applet, le browser crée automatiquement une fenêtre aux dimensions spécifiées dans le fichier html (voir plus loin) et appelle la méthode init. Cette méthode peut contenir toutes les informations "graphiques" généralement groupées dans le constructeur : setLayout, construction des composants, ajout des ActionListener,... Il n'y a pas besoin de construire une fenêtre, ni de l'afficher (ne pas utiliser show).

A la fin du chargement, la méthode start est appelée ; sa présence n'est pas obligatoire.
Si l'application doit attendre que l'utilisateur saisisse des données et clique sur un bouton avant de commencer, je déconseille fortement de l'utiliser, car Java ne supporte pas de faire autre chose en même temps que d'intercepter des événements (essayez et vous arracherez les cheveux). Dans ce cas, il vaudra mieux créer un nouveau thread dans la méthode actionPerformed qui exécutera un morceau de programme sans tout bloquer. En particulier, while(true){ est rejeté lors de l'exécution.

Les instructions System.out.println( sont inutiles. Pour afficher du texte, utilisez drawString dans paint, ou bien utilisez des zones de texte ou des labels avec setText.
Pour tout ce qui est graphisme, il faut se servir de la méthode redéfinie paint, qui contient des instructions comme DrawRect, FillOval, .... Cette méthode fonctionne exactement comme dans le cas d'une application Java habituelle ; elle est appelée par repaint.
Attention, j'ai l'impression que l'instruction repaint dans une méthode actionPerformed n'est exécutée qu'une fois la main rendue ; en particulier on ne peut pas exécuter un gros bout de programme et rafraichir régulièrement l'affichage (multithread, multithread...).

Un bouton "Stop" sert parfois à interrompre un calcul. Si vous essayez de tuer un thread et y arrivez, merci de m'expliquer. J'ai utilisé alors une astuce qui consiste à modifier un champ de l'objet exécuté dans son thread pour provoquer la sortie.

Dans tous les cas, je recommande fortement de développer votre programme comme une simple application java avant de le transformer en applet, afin de pouvoir le débugger.

Le fichier HTML insère l'applet de la façon suivante :

<applet code = "MaClasse.class"
        archive = "mesclasses.jar"
        width = "400" height="300">
</applet>

L'archive est facultative. Si votre application contient plusieurs classes, il est plus élégant de compresser tous les fichiers .class dans un fichier .jar en utilisant la commande jar cvf nomdefichier.jar *.class (jar est dans le répertoire jdk1.3/bin).

La dernière ligne spécifie la taille de la fenêtre graphique dans votre page web.

Si votre applet prend des arguments en ligne de commande, ceux-ci sont ajoutés par des commandes param name="var_name" value="valeur".



Exemple : le compte est bon

import java.awt.event.*;
import java.awt.*;
import java.applet.*;

public class CompteBon extends Applet
{
     static Choice[] N;
     static TextField t1;
     static TextArea t2;

     public void init(){

          Panel p1=new Panel(new FlowLayout());
          Panel p2=new Panel(new FlowLayout());
          Panel p3=new Panel(new FlowLayout());

          N=new Choice[6];
          int[] ch= {1,2,3,4,5,6,7,8,9,10,25,50,75,100};

          for(int i=0;i<6;i++){
               N[i] = new Choice();
               for(int j=0;j<14;j++) N[i].add(""+ch[j]);
               p1.add(N[i]);
          }

          p2.add(new Label("Résultat à atteindre :"));
          t1 = new TextField(4);
          p2.add(t1);
          Button b1 = new Button("Chercher");
          b1.addActionListener(new Go(this));
          p2.add(b1);

          add(p1);
          add(p2);

          t2=new TextArea(13,40);
          add(t2);

          p3.add(new Label("v2.2 Jacky MOCHEL"));
          add(p3);
     }

     public void start(){
     }

     public void paint(Graphics g)
     {
     }

}

class Go implements ActionListener {
     CompteBon a;

     Go (CompteBon a){
          this.a=a;
     }

     public void actionPerformed (ActionEvent e){
          int[] n = new int[6];
          int res;

          for(int i=0;i<6;i++){
               n[i]=Integer.parseInt(a.N[i].getSelectedItem());
          }

          try{
               res=Integer.parseInt(a.t1.getText());
          }
          catch(NumberFormatException f){
               a.t2.setText("\n\n\tVeuillez saisir un résultat entier");
               return;
          }

          String s = Calculer(n,res);
          a.t2.setText(s);
     }

     protected String Calculer(int[]n, int res){
          ...
     }
}


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/104/sda/2/7/j.mochel/bdd/fonctions.php on line 46


Conforme au standard HTML 4.01 Feuille de style CSS valide Page non-fumeur(c) JM-- Me laisser un message Page d'accueil