| Java | Mise à jour 11-2010 |
|
Java est un langage standard et portable qui peut être employé de trois manières différentes :
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.
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
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.
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.
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.
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 :
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 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 :
|
Les exemples fournis, dont les fichiers sources sont commentés, mettent en oeuvre différents aspects et techniques de Java.
L'application, créée sous Eclipse, constitue une gestion de bibliothèque. Elle est organisée de la manière suivante :
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.
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
Développement sur micro
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.
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.
L'application est très similaire à la précédente mais l'ergonomie en est modifiée par l'ajout de composants évolués :
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:
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.
L'avantage est double :
On utilise également pour cette application :
|
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 |