Вы находитесь на странице: 1из 5

Dveloppement de services pour les rseaux mobiles Chapitre 3: Interface Graphique

1. lAPI Swing

Interface graphique:

Fentres menus Fentres, menus, boites de dialogues dialogues, boutons boutons, zones de saisie saisie...
LAPI AWT (Abstract Window Toolkit) Toolkit)
Premire API, ds jdk1.0 Appel lOS sous sous-jacent pour laffichage (rapide, mais dpend de la machine) Nombre de composants limit (pas de dessin darbre par exemple)

Utilisation de deux API Java:


LAPI Swing
Portable 100% , dessin par Java (depuis jdk1.2) Cot Co t plus lev (lent) Tous les composants du swing drivent dune classe de lAWT Avec les applets, swing nest pas utilisable avec tous les navigateurs

Les deux API, ncessitent la gestion des vnements et la stratgie de placement des objets dans leur conteneur (Layout (Layout) )
2

Toutes les classes de swing se trouvent dans le paquetage javax.swing Tous les composants de swing hritent de JComponent Il ne faut pas mlanger les composants de swing et de awt pour la cration de la mme interface, f linterface devient instable cause des conflits

Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR

Sihem Ben Sassi

Java Interfaces graphiques STIC L2 SR

2. Les fentres

JWindow
import javax.swing.*; public class TestJWindow { public static void main(String[] p ( g[] a) ){ SwingUtilities.invokeLater(new Runnable(){ /*appele qd une application doit

Il existe plusieurs types de fentres dans Swing :


JWindow :
C'est C' t la l fentre f t la l plus l basique: b i conteneur t sans barre b de d titre, tit sans b boutons t de fermeture/redimensionnement Utilis pour faire des SplashScreen SplashScreen, , c'est c'est--dire des interfaces d'attente qui se ferment automatiquement

JDialog :
C'est une fentre destine aux botes de dialogue Peut tre modale bloque une autre fentre tant qu'elle est ouverte) Utilise conjointement avec une fentre principale

JFrame :
C'est la fentre principale dune application Ne dpend daucune autre fentre et ne peut pas tre modale Possde une barre de titre et les boutons de fermeture / agrandissement, peut accueillir une barre de menu.

}
Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR

public void run( ) { JWindow fenetre= new JWindow(); //cre une nouvelle instance de JWindow fenetre.setSize(500, 400); //dfinit la taille de la fentre fenetre.setLocation(300, 200); // dfinit la position sur lcran fenetre.setVisible(true); // la rendre visible } }); try{Thread.sleep(5000); // attendre 5sec }catch(InterruptedException e) { } System.exit(0); //fermer le programme }
Java Interfaces graphiques STIC L2 SR

rafrachir linterface graphique aprs le traitement de tous les vnements awt */

Sihem Ben Sassi

JDialog
import javax.swing.*; public class TestBoiteDialog{ public static void main(String[] a) { SwingUtilities.invokeLater(new Runnable(){ public void run(){ JDialog boitedialog = new JDialog(); // cre une nouvelle instance de JDialog boitedialog.setSize(300, 200); // dfinit la taille boitedialog.setLocation(300, 200); // spcifie la position sur cran boitedialog.setTitle("Une boite de dialogue"); // donne un titre la boite boitedialog.setVisible(true); g // la rend visible boitedialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } }); }
// fermer le programme la fermeture de la boite

JFrame - 1
import javax.swing.*; public class TestJFrame{ public static void main(String[] a) { SwingUtilities.invokeLater(new Runnable(){ public void run(){ JFrame fenetre = new JFrame(); fenetre.setSize(300, 200); fenetre.setLocation(300, 200); fenetre.setTitle("Une fentre principale"); fenetre.setVisible(true);//On la rend visible fenetre.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }); } } Puisque cest la fentre principale dune application, et va contenir beaucoup dautres composants, on implmente le code autrement:

Sihem Ben Sassi

Java Interfaces graphiques STIC L2 SR

Sihem Ben Sassi

Java Interfaces graphiques STIC L2 SR

import javax.swing.JFrame; public class FenetrePrincipale extends JFrame{ public FenetrePrincipale( ){ super( ); initialiser( ); // dfinit les proprits de la fentre } private void initialiser( ){ setSize(300, 200); setLocation(300, 200); // setLocationRelativeTo(null); permet de centrer la fentre % lcran setTitle("Une fentre principale"); setResizable(false); // pas de redimensionnement setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } import javax.swing.SwingUtilities; javax swing SwingUtilities; } public class TestJFrame{ public static void main(String[] a) { SwingUtilities.invokeLater(new Runnable(){ public void run(){ FenetrePrincipale fenetre = new FenetrePrincipale(); fenetre.setVisible (true); }
Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR }}

JFrame - 2

3. Affichage dans les fentres


Deux principaux types de composants:


Composant: un objet de linterface l interface utilisateur (bouton (bouton, zone de saisie, texte, menu, barre de dfilement, etc.) Conteneur: destin contenir dautres conteneurs et composants Ncessitent un Gestionnaire de placement (layout manger): gre la gomtrie des composants, en indiquant comment ils sont disposs dans le conteneur

});

Sihem Ben Sassi

Java Interfaces graphiques STIC L2 SR

Affichage dans les fentres


Affichage dans les fentres Gestionnaires de placement


Les gestionnaires de placement sont des objets de classes implmentant linterface LayoutManager Chaque conteneur a un gestionnaire de placement par dfaut dfaut, pouvant tre modifi par setLayout() de la classe Container Lorsque des objets sont ajouts au conteneur, la mise jour se fait par la mthode Validate de la classe Component. Gestionnaires de placement:

Une Jframe est dcoupe en plusieurs parties : la fentre, le


RootPane, le LayeredPane, le MenuBar, le ContentPane et le GlassPane. Le RootPane est le container principal, c'est lui qui contient les autres le GlassPane est une couche auau-dessus, utilise pour intercepter les actions de l'utilisateur avant qu'elles ne parviennent aux composants le LayeredPane forme un panneau compos du ContentPane et de la barre de menu (MenuBar) et ContentPane (JPanel) est le composant qui contient la partie utile de la fentre (les composants spcifiques lapplication)
JFrame JRootPane glassPane layeredPane menuBar

FlowLayout GridLayout BorderLayout B L BoxLayout t CardLayout GridBagLayout

contentPane
Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR

10

Sihem Ben Sassi

Java Interfaces graphiques STIC L2 SR

11

Affichage dans les fentres Gestionnaires de placement


Affichage dans les fentres Ajout dun texte


FlowLayout : layout par dfaut des panels. Il place les composants sur une ligne et recommence une nouvelle ligne chaque fois qu'il atteint la fin de la ligne BorderLayout : place les composants dans 5 zones du container : haut haut, bas bas, gauche, droite et centre. Il est trs utile pour grer le positionement du contentpane CardLayout : place les composants sur des couches disposes les unes sur les autres, une seule couche est visible la fois. utilis quand on a une srie de composants s'affichent en fonction de quelques choses BoxLayout: BoxLayout : place les composants en une ligne ou une colonne (longueur/ largeur ) GridLayout : place les composants dans une grille. Il redimensionne les composants pour les rendre tous de la mme taille. Utile dans le cas de plusieurs boutons ou champs texte en colonne et ligne devant avoir la mme taille GridBagLayout : le plus avanc, le plus puissant, le plus complexe utiliser. Il permet de positionner les composants dans une grille et il offre la possibilit dindiquer comment placer le composant dans la grille (ex: se redimensionner en hauteur mais pas en largeur + dfinir marges droite et gauche)
Java Interfaces graphiques STIC L2 SR

JPanel est utilis pour ajouter des objets une JFrame JFrame: :

Une boite qui stocke les objets, qui seront placs au bon endroit dans la fentre grce un LayoutManager
Peut tre mis dans mthode part qui retourne le panel construit ou dans initialiser()

import javax.swing.JPanel; import java.awt.FlowLayout;

Label (texte prdfini)


import javax.swing.JLabel;

//ajout dobjets: labels, zones de saisie, listes setContentPane(pan); // mthode de JFrame qui associe le panel // dfi dfini i au ContentPane C t tP

JPanel pan = new JPanel(); // cre une nouvelle instance de JPanel pan.setLayout(new FlowLayout()); // dfinit son gestionnaire de placement

JLabel label = new JLabel("un texte dans la fentre"); // crer un label pan.add(label); // ajoute le label au panel
Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR

Sihem Ben Sassi

12

13

4. Les boutons

Les boutons

ActionListener

Bouton:

Permet lutilisateur dinteragir avec le programme Dclenche une action quand il est cliqu

import javax.swing.JButton;

JButton bouton = new JButton("OK"); // crer un label pan.add(bouton); // ajoute le label au panel

Le clic sur le bouton entrane lenvoie dun vnement (type ActionEvent) aux couteurs du bouton ( ActionEvent) (listener listener) ) permettant de ragir lvnement par excution dune certaine action par lun des 2 moyens:
Ecrire une classe qui implmente linterface ActionListener et lajouter comme couteur aux boutons

Implmenter la mthode ActionPerformed ActionPerformed() () qui sera appele chaque clic. clic Il faut tester quel bouton a envoy lvnement

Ecrire une classe qui hrite de la classe abstraite AbstractAction pour chaque bouton

Implmenter dans chaque classe la mthode ActionPerformed ActionPerformed() () Crer le bouton en lui associant son action Utilis quand une mme action est associ plusieurs objets (bouton, menu) Permet de grer laction, le texte, licne et ltat (activ/dsactiv) du bouton 14

import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; import java.awt.FlowLayout; import java.awt.event.ActionListener; import mp java.awt.event.ActionEvent; j . w . . E ; public class FenetrePrincipale extends JFrame implements ActionListener{ private JButton bouton1, bouton2; public FenetrePrincipale( ){ //suite super( ); public void actionPerformed(ActionEvent e) { initialiser( ); } Object source = e.getSource(); private void initialiser( ){ if(source == bouton1) setSize(300, 200); {System.out.println("Vous avez cliqu OK");} setLocationRelativeTo(null); else setTitle("Une fentre principale"); if(source == bouton2){ setDefaultCloseOperation(JFrame EXIT ON CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); {System out println("Vous avez cliqu Cancel");} {System.out.println("Vous JPanel pan = new JPanel(); } pan.setLayout(new FlowLayout()); } // fin de la classe FenetrePrincipale bouton1 = new JButton("OK"); bouton1.addActionListener(this); pan.add(bouton1); bouton2 = new JButton("Cancel"); bouton2.addActionListener(this); pan.add(bouton2); setContentPane(pan); }
Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR

Sihem Ben Sassi

Java Interfaces graphiques STIC L2 SR

15

Les boutons
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; import java.awt.FlowLayout;

AbstractAction

5. Les zones de saisie


public class FenetrePrincipale extends JFrame { public FenetrePrincipale( ){ super( ); initialiser( ); import } public class ActionB2 extends AbstractAction { private void initialiser( ){ public ActionB2(String texte){ setSize(300, 200); super(texte); setLocationRelativeTo(null); } setTitle("Une fentre principale"); public void actionPerformed(ActionEvent e) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); p ( _ _ System.out.println( ); out println("Vous System Vous avez cliqu Cancel Cancel"); ); JPanel pan = new JPanel(); }} pan.setLayout(new FlowLayout()); JButton bouton1 = new JButton(new ActionB1("OK")); pan.add(bouton1); JButton bouton2 = new JButton(new ActionB2("Cancel")); pan.add(bouton2); setContentPane(pan); }}
Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR

import javax.swing.AbstractAction; import java.awt.event.ActionEvent; public class ActionB1 extends AbstractAction { public ActionB1(String texte){ super(texte); p ( ) } public void actionPerformed(ActionEvent e) { System.out.println("Vous avez cliqu OK");} }

Servent demander lutilisateur de saisir du texte Plusieurs types: yp


JTextField : un texte sur une seule ligne JTextArea : un texte sur plusieurs lignes JEditorPane : un texte sur plusieurs lignes avec mise en forme (police, taille, couleur) pouvant contenir des images JTextPane : idem JEditorPane + insertion de composants Swing

JTextField
JTextField champtext = new JTextField(); champtext.setColumns(15); // saisir max 15 caractres pan.add(champtext);

16

Sihem Ben Sassi

Java Interfaces graphiques STIC L2 SR

17

import javax.swing.JFrame; import javax.swing.AbstractAction; import javax.swing.JPanel; import java.awt.event.ActionEvent; import javax.swing.JButton; Dclarer un attribut de type JTextField, crire la mthode get() qui le retourne, le import javax.swing.JOptionPane; import javax.swing.JTextField; rcuprer quand un bouton est cliqu enpublic passant la ActionB1 fentre qui contient le champ class extends AbstractAction { import java.awt.FlowLayout; texte comme paramtre au constructeur de la daction dtaction private i classe t F FenetrePrincipale P i relative i l f f; au bouton import java.awt.event.ActionListener; public ActionB1(FenetrePrincipale f, String texte) public class FenetrePrincipale extends JFrame{ { super(texte); private JTextField champText; this.f = f; public FenetrePrincipale( ){ } super( ); initialiser( ); } public void actionPerformed(ActionEvent e) { public JtextField getChamp( ) { String t = f.getChamp().getText(); return champText; } System.out.println(t); //affichage systme // ou dans une boite de dialogue private void initialiser( ){ JOptionPane.showMessageDialog(null, t) ; } JPanel pan = new JPanel(); } pan.setLayout(new FlowLayout()); champText = new JTextField(); champText.setColumns(20); pan.add(champText); JButton bouton1 = new JButton(new ActionB1(this, "Recup champ")); pan.add(bouton1); setContentPane(pan); }}
Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR

Les zones de saisie Rcuprer le texte saisi dans JTextField

6. Les boites de dialogue -1


La classe JOptionPane fournit des faons simples de crer des dialogues


JOptionPane boiteD = new JOptionPane();

4 types de boites de dialogue:


Dialogue dinformation boiteD.showMessageDialog(parentComponent, message, title, messageType, icon) Dialogue de confirmation boiteD. showConfirmDialog(Component , message, title, optionType, messageType, icon) Dialogue de saisie boiteD. b i D showInputDialog(Component, h I Di l (C message, title, i l messageType, T i icon, selectionValues, initialSelectionValue)

avec selectionValues est une liste dobjects (valeurs), initialSelectionValue est la valeur slectionne par dfaut

Dialogue avec boutons personnaliss boiteD. showOptionDialog(parentComponent, message, title, optionType, messageType, icon, options, initialValue)

18

Sihem Ben Sassi

Java Interfaces graphiques STIC L2 SR

19

Les boites de dialogue -2


Les boites de dialogue -3


int reponse = boiteD.showMessageDialog(null, " Etes vous sur dcraser le fichier?", "??? ", JOptionPane.YES_NO_OPTION); if (reponse == JOptionPane.YES_OPTION)

Type du message: (auquel est associ une icne par dfaut si aucune nest spcifie)
ERROR_MESSAGE INFORMATION O O _MESSAGE SS G WARNING_MESSAGE QUESTION_MESSAGE PLAIN_MESSAGE DEFAULT_OPTION YES_NO_OPTION YES_NO_CANCEL_OPTION OK_CANCEL_OPTION

Type doption : dfinit les boutons qui vont apparatre dans la boite

String reponse =boiteD.showInputDialog(null, "vrification", "Retapez le nom");

Exemples
boiteD.showMessageDialog(null, " Le dossier nexiste pas", " erreur ", JOptionPane.ERROR_MESSAGE);

Sihem Ben Sassi

Java Interfaces graphiques STIC L2 SR

20

Sihem Ben Sassi

Java Interfaces graphiques STIC L2 SR

21

Вам также может понравиться