Java Valid XHTML 1.1Cette page est conforme à la norme CSS!Mise à jour 11-2010
SOMMAIRE

Présentation
    Préambule
    Syntaxe rapide
    Les packages graphiques
    Les applets
Les exemples détaillés
Les outils et liens
Télécharger les exemples

PRESENTATIONRetour en haut de page

Préambule Suiv.

Java est un langage standard et portable qui peut être employé de trois manières différentes :
  • du côté serveur, comme langage de création de pages dynamiques (comme ASP, PHP ou CGI)
  • du côté client, comme langage de développement d'applications riches
  • du côté navigateur client, en tant qu'applet. Ne pas confondre avec le Javascript dont la syntaxe est similaire mais les fonctionnalités extrèmement plus réduites.
Sa syntaxe s'inspire du C, tout en étant plus simple dans son utilisation (par exemple la libération d'espace mémoire devenu inutile est automatique, contrairement au C où il faut explicitement faire le ménage).

Les applications riches sont des applications locales ou réseau, n'utilisant pas le navigateur web, et offrant grâce à des bibliothèques de développement des interfaces graphiques "riches", présentant de nombreux contrôles (boutons, listes déroulantes, etc...)

Une applet est une application Java conçue pour être incluse dans une page HTML. C'est une application en soi, mais pas une application automome pour autant. On pourrait la comparer à une DLL. Son code est inaccessible puisque (pré)compilé.

Le langage utilise l'approche objet du C++, avec des classes pré-définies et d'autres que le développeur peut définir à sa guise.

Il permet aussi, grâce à des packages différents, de gérer l'interface utilisateur (bouton, zones texte, ...). Ici seront présentés AWT, SWING et SWT.

Description sommaire du langage Préc.Suiv.

Le principe de base est la déclaration et l'utilisation de classes.

Obéissant aux règles de la programmation objet, on parle de méthodes et de propriétés. On y parle aussi d'héritage, mécanisme qui permet de créer une nouvelle classe à partir d'une autre, en lui ajoutant ou modifiant des méthodes et des propriétés.

Les types de fichiers

.java     Source java
.cls ou .class   Classe compilée

Un fichier compilé, étant créé dans un langage intermédiaire, interprété par le Java RunTime ou JRE, peut être porté sur n'importe quelle plateforme.
Ainsi, un programme développé sous l'environnement Eclipse avec une base Access (via ODBC) a été porté sans modification sur un serveur AS400.

Les classes fournies

Java fournit un certain nombre de classes pré-définies, qui donnent accès à des fonctions de base (afficher à l'écran, accès aux fichiers, gestion de l'interface GUI...).
Les classes de base sont importées dans le programme, via des packages, par la directive import.

Les classes définies par le développeur

Une classe est toujours créée à partir d'une classe existante : soit la classe Applet qui est l'origine de toutes les classes, soit une classe d'objet particulière.
Elle se compose d'une définition, de fonctions (méthodes) et de variables (propriétés).
Dans un même fichier source, on peut avoir plusieurs classes; elles ne sont alors connues que dans ce seul programme.

Le package graphique AWT Préc.Suiv.

AWT constitue la package le plus ancien, et natif, de Java.

L'apparence des divers contrôles est caractéristique, car ils sont générés entièrement par le package.
Ils sont créés à partir de classes prédéfinies, par exemple Button bt=new Button(name);, où name constitue le texte du bouton.

Ensuite, ils sont disposés dans l'écran par des layout qui définissent la manière dont ils sont agencés les uns par rapport aux autres. L'avantage de cette méthode est de fournir un affichage adapté à la taille de la zone d'affichage, que l'on rapetisse ou agrandisse la fenêtre.

Voici ci-dessous les principaux modes de disposition existants.

La plus simple (et simpliste) est la classe FlowLayout : les boutons sont disposés à la suite sur une ligne, en fonction de leur taille réelle, avec des espacements verticaux et horizontaux définissables.

La classe GridLayout dispose les boutons dans une grille d'affichage, ce qui facilite les alignements lignes et colonnes. Les cellules ont la taille du plus grand composant de la ligne ou de la colonne.

La classe BorderLayout dispose les boutons dans un schéma haut-droite-bas-gauche-centre.

La classe GridBagLayout est la plus complète et la plus complexe aussi. Comme les tableaux en HTML, une cellule peut occuper plus d'une ligne ou colonne, en travaillant avec des poids relatifs. C'est cependant celle que l'on préfère car elle autorise un bon contrôle de la position des objets.
Les positionnements et dimensions sont exprimés via des GridBagConstraints.

Il existe enfin la CardLayout qui présente les objets page par page.

Souvent, pour obtenir la présentation voulue, et afin de se simplifier la programmation, il vaut mieux écrire plusieurs classes, chacune utilisant une présentation, et appeler ces classes au sein d'une classe qui les coiffe.
On peut alors inclure par exemple une gridlayout dans une gridbaglayout.

Les actions de l'utilisateur (clic souris, frappe clavier, ...) sont interceptées par une méthode, qui détecte la nature du contrôle lié à l'événement (instanceof) et déclenche le traitement adéquat en fonction des tests réalisés.

Le package graphique SWING Préc.Suiv.

SWING est en partie basé sur AWT.
L'écran (appelé aussi frame) est créé en dérivant la classe JFrame.
Les contrôles sont créés à partir de classes prédéfinies, par exemple btr=new JRadioButton();.
Ensuite, les contrôles sont ajoutés dans le frame ou dans d'autres contrôles conteneurs (tel un JPanel) et disposés selon différents layout. Chaque conteneur possède son propre layout.

Outre les layout présents dans AWT, SWING propose des layout supplémentaires.

Le BoxLayout est une version du Flowlayout, avec plus de possibilités de définition des tailles et des positions des contrôles.

Il existe également le GroupLayout qui permet de définir une présentation hiérarchique des contrôles et le SpringLayout où les positions des composants sont définis par rapport aux autres composants.

Les événements sont interceptés par une méthode surchargée de la classe (frame), qui reçoit en paramètre l'objet responsable de l'événement.


Le package graphique SWT Préc.Suiv.

Contrairement aux deux précédents packages, SWT s'appuie sur le système d'exploitation sous-jacent, ce qui assure une apparence standard des fenêtres et contrôles utilisés.
Son utilisation nécessite d'inclure la bibliothèque dans le projet, en tant que fichier jar externe.

Le programme prend donc la forme d'une classe qui va créer les objets graphiques nécessaires, et se rapproche en cela de la méthode utilisée par exemple dans .NET.
La cinématique du programme est assurée par deux objets créés de manière unique pour l'application :
  • un Display qui représente l'écran : Display disp = new Display();,
  • un Shell qui sert de support au display et gère les événements : shl = new Shell(disp);
Les contrôles sont créés à partir de classes prédéfinies, par exemple pour un bouton radio btr=new Button(shl, SWT.RADIO);.
Ensuite, les contrôles sont ajoutés dans le shell ou dans d'autres contrôles conteneurs (tel un Canvas ou Composite) et disposés selon différents layout. Chaque conteneur possède son propre layout.


Voici ci-dessous les principaux layouts disponibles :

Le FillLayout vertical dispose un contrôle par ligne, avec quelques paramètres de mise en page (espacement, marges, ...). Il est très limité : pas de gestion fine de la disposition, de la taille.
Il en existe aussi une version horizontale.

Le RowLayout positionne les controles séquentiellement en ligne, avec saut à la ligne suivante si nécessaire.
Il est possible de controler plus finement certaines caractéristiques des controles par un objet de classe RowData.

Le GridLayout considère la fenêtre comme une matrice de cellules, dont le nombre de colonnes est fixé au début. On peut attribuer à chaque controle, via un objet Griddata, diverses caractéristiques parmi lesquelles le poids vertical ou horizontal (en termes de nombre de cellules).
La répartition suit l'ordre de création des contrôles et les affecte selon leurs poids. Il est donc nécessaire parfois de créer des controles qui restent invisibles; c'est le cas par exemple lorsqu'on juxtapose un controle de 2 lignes de haut avec un autre qui ne s'étend que sur une ligne.

Le FormLayout est le plus souple de tous.
Dans celui-ci, grace à un Formdata pour chaque controle, on peut le positionner par rapport à la fenetre ou par rapport à un autre contrôle. Le positionnement s'effectue en situant un bord du contrôle par rapport à un autre côté de l'objet de référence.
Pour placer un bouton à côté d'un autre, on indique pour le côté gauche le premier bouton et le nombre de pixels séparant les deux boutons.
Pour aligner un bouton sous un autre, on indique le premier bouton, le décalage (0) et le côté de référence (par ex. SWT.LEFT).
On peut aussi avoir une référence en % par rapport à la fenêtre.

Les événements sont interceptés par des Listeners, méthodes de la classe, que l'on affecte ensuite aux contrôles par un btr.addSelectionListener(...);

L'application doit comporter une boucle générale de gestion du shell.



Les applets Préc.

Les applets sont des applications java qui s'intègrent dans une page HTML. Les applets dérivent de la classe applet.
Certaines fonctions ont une utilisation particulière :
init     Appelée au chargement de l'applet. On y initialise les différentes variables, objets graphiques, etc.
paint   Dispose et affiche les objets graphiques dans l'applet.
action   Détecte les actions clavier et souris

LES EXEMPLES DETAILLESRetour en haut de page

Les exemples fournis, dont les fichiers sources sont commentés, mettent en oeuvre différents aspects et techniques de Java.
  • Gestion de bibliothèque : il s'agit d'une application réaliste, qui gère de multiples frames, une base de données, des menus. Les sources intègrent les commentaires nécessaire à la documentation automatique,
  • Tracé de graphe : sous les trois environnements graphiques (AWT, SWING et SWT), réalisation d'une application de dessin montrant la gestion des événements, y compris sous forme d'applet,
  • Jeu de cases : autre exemple d'applet,
  • Démonstration de portabilité inter-plateformes (PC - AS400)

Gestion de bibliothèque (bdd02) Suiv.

L'application, créée sous Eclipse, constitue une gestion de bibliothèque.
Elle est organisée de la manière suivante :
  • Dossier racine, contenant la base de données et les fichiers de définition du projet,
  • Dossier principal, contenant la classe initiale de lancement et celle d'affichage des livres, qui constitue l'écran de gestion de l'application,
  • Dossier outils, contenant les programmes annexes d'enregistrement d'un livre, de saisie des critères de recherche et la classe de définition des paramètres à passer entre les différents écrans.
Elle est réalisée avec le package graphique SWT (gestionnaire FormLayout) et gère une base Access, accessible par ODBC.
Elle contient également les lignes nécessaires à la documentation automatique par javadoc.

Ci-dessous une brève description du fonctionnement et des différentes classes utilisées.

Le formulaire principal affiche une table avec les livres classés par ordre décroissant de n°.
Le bouton rechercher permet d'activer un formulaire de recherche sur titre et auteur.
Un double-clic sur un livre passe en modification de ce livre.
Un double-clic sur une ligne vierge passe en création.
Un menu popup propose la suppression de la ligne en cours ou la création d'un nouveau livre

classe bdd02main
Crée la classe principale de lancement de l'application.

classe bdd02aff
Formulaire principal : gère le display de l'application.
Affiche la table des livres.
Appelle les autres formulaires en leur passant des paramètres dans une classe spécifique.
Récupération par calcul de la ligne en cours de la table selon position du curseur (double clic pour maj ou clic droit pour suppression via popup).
Boite de dialogue pour confirmer la suppression.

classe bdd02rch
Formulaire de recherche : titre en zone texte, auteur en liste déroulante.
Il faut une liste déroulante pour l'affichage des noms d'auteurs, une autre, invisible pour les clés dans la base.

classe bdd02maj
Formulaire de création/maj.
Controle des données saisies et affichage des erreurs par MessageBox.

classe bdd02prm
Classe ne contenant que des variables.
Celles-ci contiennent le display, la connection base de données et les paramètres à passer entre formulaires.


Portabilité Windows - AS400 (bdd01) Préc.Suiv.

L'application constitue un exemple simple permettant de démontrer la portabilité des programmes écrits en java.
Le fichier compilé est transféré par FTP sur l'AS400, sans transformation et, après modification du lien ODBC, peut être exécuté sur une table de l'AS400.

La procédure qui suit illustre la manière de travailler sur chaque système (développement et installation).
L'application support comporte 2 fichiers sources (j01.java et j01a.java), le premier créant un objet de la classe du second.
Sur le micro, un répertoire d:\devjava contient les sources et classes compilées. Le JDK 1.6 est chargé dans d:\jdk6.
Sur l'as400, ces objets sont contenus dans un répertoire devjava de l'IFS (accès par WRKLNK). La version de Java est 1.4 (OS V5R4).

Développement sur AS/400

Edition du source
(ecran de commande as400)
cd '/devjava'
edtf j01.java
edtf j01a.java
Compiler
(session shell - commande QSH)
cd '/devjava'
javac -classpath '.' j01.java
(la classe j01a, appelée dans j01, est compilée automatiquement)
Exécuter
(session shell - commande QSH)
cd '/devjava'
java j01
Transférer les classes
sur le micro

(session FTP en écran DOS ou autre)
open 1.2.3.4
user xxxxxxx
mot-de-passe
bin
get /devjava/j01.class d:\devjava\j01.class
get /devjava/j01a.class d:\devjava\j01a.class
close
bye
Exécuter
(session DOS sur le micro)
cd d:\devjava'
java j01

Développement sur micro

Edition du source Utiliser votre éditeur micro favori
Compiler
(session DOS)
cd d:\devjava
d:\jdk6\bin\javac -target 1.4 -source 1.4 j01.java
(la classe j01a, appelée dans j01, est compilée automatiquement.
Les paramètres 1.4 identifient la version java sur l'as400)
Exécuter
(session DOS)
cd d:\devjava
java j01
Transférer les classes
sur l'as400

(session FTP en écran DOS ou autre)
open 1.2.3.4
user xxxxxxx
mot-de-passe
bin
put d:\devjava\j01.class /devjava/j01.class
put d:\devjava\j01a.class /devjava/j01a.class
close
bye
Exécuter
(session shell as400 - commande QSH)
cd /devjava
java j01

Tracé de graphes avec SWT (swt04) Préc.Suiv.

L'application trace dans un frame un graphique dont les caractéristiques sont contrôlées par différents widgets.
Ci-dessous une brève description du fonctionnement et des différentes classes utilisées.

Un groupe de boutons radio détermine le choix du paramètre de tracé (coefficient).
Le graphe est dessiné dans un canvas et actualisé soit par le redimensionnement du frame, soit par le choix d'un bouton.

classe swt04main
Crée la classe principale de lancement de l'application.

classe swt04a
Classe principale qui définit les différents contrôles et affecte à l'événément paintControl la fonction qui redessine le contenu du canvas.
Cette fonction est déclenchée soit par le redimensionnement du frame, soit par l'ordre explicite redraw appliqué au canvas par les boutons radio.


Tracé de graphes avec SWING (swing04) Préc.Suiv.

Semblable à l'application précédente, l'implémentation en est différente.
Ci-dessous une brève description du fonctionnement et des différentes classes utilisées.

Un groupe de boutons radio détermine le choix du paramètre de tracé (coefficient).
Le graphe est dessiné dans un Jpanel et actualisé soit par le redimensionnement du frame, soit par le choix d'un bouton.

L'application s'appuie sur JFrame, dans lequel sont ajoutés deux JPanel. Le second est complété de boutons radio pour contrôler le paramétrage du graphique.
Un groupe de boutons radio détermine le choix du paramètre de tracé (coefficient).
Le graphe est dessiné dans un canvas et actualisé soit par le redimensionnement du frame, soit par le choix d'un bouton.

classe swing04a
Est créée par dérivation de la classe Jframe.
Celui-ci contient deux JPanel; le premier recevant le tracé, le second est complété de boutons radio pour contrôler le paramétrage du graphique.
Un BoxLayout dispose les différents composants graphiques.

Le dessin du graphe est réalisé dans un canvas, dérivé de la classe JPanel, dans laquelle la méthode paintComponent est surchargée et activée par un repaint adressé au canvas.


Tracé de graphes amélioré avec SWING (swing06) Préc.Suiv.

L'application est très similaire à la précédente mais l'ergonomie en est modifiée par l'ajout de composants évolués :
  • un panneau à onglets (JTabbedPane),
  • une règle JSlider pour choisir le paramètre de tracé, en remplacement de multiples boutons radio,
  • un Timer pour séquencer les affichages.


Tracé de graphe (applet)    Voir le résultatPréc.Suiv.

L'application est similaire à celle présentée plus haut (swt04) avec la particularité d'être sous forme d'applet dans une feuille html.
La classe est créée en dérivant la classe de base applet.
L'applet est intégrée dans la page html par la balise applet.

Ci-dessous les particularités de cette application:
  • les éléments graphiques sont insérés dans un gridbaglayout,
  • le graphique est tracé non dans la zone graphique de l'applet, mais dans un canvas disposé dans la zone de l'applet.
    Il est alors nécessaire, à partir de la classe de base canvas, de créer une nouvelle classe (nouvcan) dans laquelle on surcharge (ou sous-classe) la méthode paint de l'objet de base canvas,
  • utilisation de fonctions mathématiques (sin et cos),
  • utilisation de fonctions graphiques (tracé de lignes),
  • saisie d'une zone de texte et traitement d'un bouton
Voir le résultat

Jeu de cases (applet)    Voir le résultatPréc.

L'application constitue un jeu, où il s'agit de changer les couleurs des 9 cases, à partir d'une configuration de départ aléatoire, afin d'obtenir une situation finale connue (toutes les cases de la même couleur sauf celle du centre).

L'application est composée de plusieurs classes, qui gèrent chacune une des fonctions du jeu.

  • une classe Jeucases pour le tableau des 9 cases,
  • une classe Jcnouv pour le bouton nouveau,
  • une classe Jcquit pour le bouton quitter,
  • une classe Jcscor pour le score.

L'avantage est double :

  • une classe contient les propriétés et les méthodes qui lui sont propres, ce qui évite toute interférence avec d'autres classes.
    Par exemple, la classe "score" contient un compteur pour le score, et les méthodes "remise à zéro" et "incrémentation du score".
  • la programmation est plus simple, car au lieu d'écrire tout un détail, il suffit d'appeler un objet de la classe que l'on vient de créer,

On utilise également pour cette application :

  • la présentation gridbaglayout,
  • le traitement de boutons,
  • l'affichage de texte (le score),
Voir le résultat


LES OUTILS ET LIENSRetour en haut de page

Outils

Jdk de Sun à l'adresse http://java.sun.com
La compilation s'effectue par la commande jdk\bin\javac xxxxx.java. Le résultat est la production des fichiers .class correspondant aux classes définies dans l'application.

Description des layouts de AWT et SWING http://java.sun.com/docs/books/tutorial/uiswing/layout/spring.html
Description des layouts de SWT http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html