Langage Java

Embed Size (px)

Citation preview

  • 11. lAPI Swing1. lAPI Swing

    Interface graphique:Interface graphique:zz Fentres menus boites de dialogues boutons zones de saisieFentres menus boites de dialogues boutons zones de saisiezz Fentres, menus, boites de dialogues, boutons, zones de saisie...Fentres, menus, boites de dialogues, boutons, zones de saisie...

    Utilisation de deux API Java:Utilisation de deux API Java:zz LAPI AWT (Abstract LAPI AWT (Abstract WindowWindow ToolkitToolkit) )

    Premire API, ds jdk1.0Premire API, ds jdk1.0 Appel lOS sousAppel lOS sous--jacent pour laffichage (rapide, mais dpend de la machine)jacent pour laffichage (rapide, mais dpend de la machine) Nombre de composants limit (pas de dessin darbre par exemple)Nombre de composants limit (pas de dessin darbre par exemple)

    zz LAPI SwingLAPI Swing Portable 100% , dessin par Java (depuis jdk1.2)Portable 100% , dessin par Java (depuis jdk1.2)

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 2

    CoCot plus lev (lent)t plus lev (lent) Tous les composants du swing drivent dune classe de lAWTTous les composants du swing drivent dune classe de lAWT Avec les applets, swing nest pas utilisable avec tous les navigateursAvec les applets, swing nest pas utilisable avec tous les navigateurs

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

    Toutes les classes de Toutes les classes de swing se trouvent dans swing se trouvent dans le paquetage le paquetage javax.swingjavax.swing

    Tous les composants de Tous les composants de swing hritent de swing hritent de JComponentJComponent

    Il ne faut pas mlanger Il ne faut pas mlanger les composants de swing les composants de swing et de et de awtawt pour la cration pour la cration

    ff

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 3

    de la mme interface, de la mme interface, linterface devient linterface devient instable cause des instable cause des conflitsconflits

    2. Les fentres2. Les fentres Il existe plusieurs types de fentres dans Swing :Il existe plusieurs types de fentres dans Swing :

    zz JWindowJWindow : : C' t l f t l l b i t b d tit b tC' t l f t l l b i t b d tit b t C'est la fentre la plus basique: conteneur sans barre de titre, sans boutons C'est la fentre la plus basique: conteneur sans barre de titre, sans boutons de fermeture/redimensionnement de fermeture/redimensionnement

    Utilis pour faire des Utilis pour faire des SplashScreenSplashScreen, c'est, c'est----dire des interfaces d'attente qui dire des interfaces d'attente qui se ferment automatiquementse ferment automatiquement

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

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 4

    zz JFrameJFrame : : C'est la fentre principale dune applicationC'est la fentre principale dune application Ne dpend daucune autre fentre et ne peut pas tre modaleNe dpend daucune autre fentre et ne peut pas tre modale Possde une barre de titre et les boutons de fermeture / agrandissement, Possde une barre de titre et les boutons de fermeture / agrandissement,

    peut accueillir une barre de menu. peut accueillir une barre de menu.

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

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

    public void run( ) {JWindow fenetre= new JWindow(); //cre une nouvelle instance de JWindowfenetre.setSize(500, 400); //dfinit la taille de la fentrefenetre.setLocation(300, 200); // dfinit la position sur lcranfenetre.setVisible(true); // la rendre visible

    }

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 5

    }});try{Thread.sleep(5000); // attendre 5sec}catch(InterruptedException e) { }System.exit(0); //fermer le programme}

    }

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

  • 2JDialogJDialog

    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 JDialogboitedialog.setSize(300, 200); // dfinit la tailleboitedialog.setLocation(300, 200); // spcifie la position sur cranboitedialog.setTitle("Une boite de dialogue"); // donne un titre la boiteboitedialog.setVisible(true); // la rend visible

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 6

    g

    boitedialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);// fermer le programme la fermeture de la boite

    }});}

    }

    JFrameJFrame -- 11import javax.swing.*;

    public class TestJFrame{public static void main(String[] a) {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 visiblefenetre.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 7

    fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}

    });}

    }Puisque cest la fentre principale dune application, et va contenir beaucoupdautres composants, on implmente le code autrement:

    JFrameJFrame -- 22import 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 % lcransetTitle("Une fentre principale");setResizable(false); // pas de redimensionnementsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    } import javax swing SwingUtilities;

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 8

    }}

    import 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); }

    });}}

    3. Affichage dans les fentres3. Affichage dans les fentres

    Deux principaux types de composants:Deux principaux types de composants:zz ComposantComposant: un objet de linterface utilisateur (bouton zone de: un objet de linterface utilisateur (bouton zone dezz ComposantComposant: un objet de l interface utilisateur (bouton, zone de : un objet de l interface utilisateur (bouton, zone de

    saisie, texte, menu, barre de dfilement, etc.)saisie, texte, menu, barre de dfilement, etc.)zz ConteneurConteneur: destin contenir dautres conteneurs et : destin contenir dautres conteneurs et

    composantscomposantszz Ncessitent un Ncessitent un Gestionnaire de placementGestionnaire de placement (layout manger): (layout manger):

    gre la gomtrie des composants, en indiquant comment ils gre la gomtrie des composants, en indiquant comment ils sont disposs dans le conteneursont disposs dans le conteneur

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 9

  • 3Affichage dans les fentresAffichage dans les fentres

    Une Jframe est dcoupe en plusieurs parties : Une Jframe est dcoupe en plusieurs parties : la fentre, le la fentre, le RootPane, le LayeredPane, le MenuBar, le ContentPane et le GlassPaneRootPane, le LayeredPane, le MenuBar, le ContentPane et le GlassPane..zz Le Le RootPaneRootPane est le container principal, c'est lui qui contient les autresest le container principal, c'est lui qui contient les autreszz le le GlassPaneGlassPane est une couche auest une couche au--dessus, utilise pour intercepter les dessus, utilise pour intercepter les

    actions de l'utilisateur avant qu'elles ne parviennent aux composantsactions de l'utilisateur avant qu'elles ne parviennent aux composantszz le le LayeredPaneLayeredPane forme un panneau compos du forme un panneau compos du ContentPaneContentPane et de la et de la

    barre de menu (barre de menu (MenuBarMenuBar) et ) et zz ContentPaneContentPane (JPanel) est le composant qui contient la partie utile de la (JPanel) est le composant qui contient la partie utile de la

    fentre (les composants spcifiques lapplication)fentre (les composants spcifiques lapplication)

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 10

    glassPane

    contentPane menuBar

    layeredPane

    JRootPane

    JFrame

    Affichage dans les fentresAffichage dans les fentres Les gestionnaires de placement sont des objets de classes implmentant Les gestionnaires de placement sont des objets de classes implmentant

    linterface LayoutManagerlinterface LayoutManager Chaque conteneur a un gestionnaire de placement par dfaut pouvant treChaque conteneur a un gestionnaire de placement par dfaut pouvant tre

    Gestionnaires de placement

    Chaque conteneur a un gestionnaire de placement par dfaut, pouvant tre Chaque conteneur a un gestionnaire de placement par dfaut, pouvant tre modifi par setLayout() de la classe Containermodifi par setLayout() de la classe Container

    Lorsque des objets sont ajouts au conteneur, la mise jour se fait par la Lorsque des objets sont ajouts au conteneur, la mise jour se fait par la mthode Validate de la classe Component.mthode Validate de la classe Component.

    Gestionnaires de placement:Gestionnaires de placement:zz FlowLayoutFlowLayoutzz GridLayoutGridLayoutzz BorderLayoutBorderLayout

    B L tB L t

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 11

    zz BoxLayoutBoxLayoutzz CardLayoutCardLayoutzz GridBagLayoutGridBagLayoutzz

    Affichage dans les fentresAffichage dans les fentres

    FlowLayoutFlowLayout : : layoutlayout par dfaut des panels. Il place les composants sur une ligne 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 ligneet recommence une nouvelle ligne chaque fois qu'il atteint la fin de la ligne

    BorderLayoutBorderLayout : place les composants dans 5 zones du container : haut bas: place les composants dans 5 zones du container : haut bas

    Gestionnaires de placement

    BorderLayoutBorderLayout : place les composants dans 5 zones du container : haut, bas, : place les composants dans 5 zones du container : haut, bas, gauche, droite et centre. Il est trs utile pour grer le gauche, droite et centre. Il est trs utile pour grer le positionementpositionement du du contentpanecontentpane

    CardLayoutCardLayout : place les composants sur des couches disposes les unes sur les : 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 autres, une seule couche est visible la fois. utilis quand on a une srie de composants s'affichent en fonction de quelques chosescomposants s'affichent en fonction de quelques choses

    BoxLayoutBoxLayout: place les composants en une ligne ou une colonne : place les composants en une ligne ou une colonne (longueur/ largeur )(longueur/ largeur ) GridLayoutGridLayout : place les composants dans une grille. Il redimensionne les : place les composants dans une grille. Il redimensionne les

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 12

    composants pour les rendre tous de la mme taille. Utile dans le cas de 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 plusieurs boutons ou champs texte en colonne et ligne devant avoir la mme tailletaille

    GridBagLayoutGridBagLayout : le plus avanc, le plus puissant, le plus complexe utiliser. Il : le plus avanc, le plus puissant, le plus complexe utiliser. Il permet de positionner les composants dans une grille et il offre la possibilit permet de positionner les composants dans une grille et il offre la possibilit dindiquer comment placer le composant dans la grille (ex: se dindiquer comment placer le composant dans la grille (ex: se redimensionner en redimensionner en hauteur mais pas en largeur + dfinir marges droite et gauchehauteur mais pas en largeur + dfinir marges droite et gauche))

    Affichage dans les fentresAffichage dans les fentres

    JPanelJPanel est utilis pour ajouter des objets une est utilis pour ajouter des objets une JFrameJFrame::zz Une boite qui stocke les objets, qui seront placs au bon endroit Une boite qui stocke les objets, qui seront placs au bon endroit

    Ajout dun texte

    dans la fentre grce un dans la fentre grce un LayoutManagerLayoutManagerimport javax.swing.JPanel;import java.awt.FlowLayout;JPanel pan = new JPanel(); // cre une nouvelle instance de JPanelpan.setLayout(new FlowLayout()); // dfinit son gestionnaire de placement//ajout dobjets: labels, zones de saisie, listes setContentPane(pan); // mthode de JFrame qui associe le panel

    // dfi i C t tP

    Peut tre mis dans mthode part qui retourne le panel construit ou dans initialiser()

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 13

    Label (texte prdfini)Label (texte prdfini)import javax.swing.JLabel;JLabel label = new JLabel("un texte dans la fentre"); // crer un labelpan.add(label); // ajoute le label au panel

    // dfini au ContentPane

  • 44. Les boutons4. Les boutons Bouton:Bouton:

    zz Permet lutilisateur dinteragir avec le programmePermet lutilisateur dinteragir avec le programmezz Dclenche une action quand il est cliquDclenche une action quand il est cliqu

    import javax.swing.JButton;

    zz Le clic sur le bouton entrane lenvoie dun Le clic sur le bouton entrane lenvoie dun vnementvnement (type (type ActionEventActionEvent) aux ) aux couteurscouteurs du bouton (du bouton (listenerlistener) permettant de ragir ) permettant de ragir lvnement par excution dune certaine action par lun des 2 moyens:lvnement par excution dune certaine action par lun des 2 moyens:

    Ecrire une classe qui implmente linterface Ecrire une classe qui implmente linterface ActionListenerActionListener et lajouter et lajouter comme couteur aux comme couteur aux boutons boutons

    Implmenter la mthodeImplmenter la mthode ActionPerformedActionPerformed() qui sera appele chaque clic Il faut() qui sera appele chaque clic Il faut

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

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 14

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

    Ecrire une classe qui hrite de la classe abstraite Ecrire une classe qui hrite de la classe abstraite AbstractActionAbstractAction pour pour chaque boutonchaque bouton

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

    Les boutons ActionListenerimport javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JButton;import java.awt.FlowLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;mp j . w . . E ;public class FenetrePrincipale extends JFrame implements ActionListener{

    private JButton bouton1, bouton2;public FenetrePrincipale( ){

    super( );initialiser( ); }

    private void initialiser( ){setSize(300, 200);setLocationRelativeTo(null); setTitle("Une fentre principale");setDefaultCloseOperation(JFrame EXIT ON CLOSE);

    //suitepublic void actionPerformed(ActionEvent e) {

    Object source = e.getSource();if(source == bouton1)

    {System.out.println("Vous avez cliqu OK");}else

    if(source == bouton2){{System out println("Vous avez cliqu Cancel");}

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 15

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel pan = new JPanel(); pan.setLayout(new FlowLayout()); bouton1 = new JButton("OK"); bouton1.addActionListener(this);pan.add(bouton1); bouton2 = new JButton("Cancel"); bouton2.addActionListener(this);pan.add(bouton2); setContentPane(pan); }

    {System.out.println("Vous avez cliqu Cancel");}}

    } // fin de la classe FenetrePrincipale

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

    import javax.swing.AbstractAction;import java.awt.event.ActionEvent;public class ActionB1 extends AbstractAction {

    public ActionB1(String texte){super(texte); }

    public class FenetrePrincipale extends JFrame {public FenetrePrincipale( ){

    super( );initialiser( );

    }private void initialiser( ){

    setSize(300, 200);setLocationRelativeTo(null); setTitle("Une fentre principale");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    p ( ) }public void actionPerformed(ActionEvent e) {

    System.out.println("Vous avez cliqu OK");}}

    import public class ActionB2 extends AbstractAction {

    public ActionB2(String texte){super(texte);

    }public void actionPerformed(ActionEvent e) {

    System out println("Vous avez cliqu Cancel");

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 16

    p ( _ _ );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);

    } }

    System.out.println( Vous avez cliqu Cancel );}}

    5. Les zones de saisie5. Les zones de saisie

    Servent demander lutilisateur de saisir du texteServent demander lutilisateur de saisir du texte Plusieurs types:Plusieurs types:ypyp

    z JTextField : un texte sur une seule lignez JTextArea : un texte sur plusieurs lignesz JEditorPane : un texte sur plusieurs lignes avec mise en forme (police,

    taille, couleur) pouvant contenir des imagesz JTextPane : idem JEditorPane + insertion de composants Swing

    JTextFieldJTextField

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 17

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

  • 5Les zones de saisieLes zones de saisie

    Dclarer un attribut de type JTextField, crire la mthode get() qui le retourne, le Dclarer un attribut de type JTextField, crire la mthode get() qui le retourne, le rcuprer quand un bouton est cliqu en passant la fentre qui contient le champ rcuprer quand un bouton est cliqu en passant la fentre qui contient le champ texte comme paramtre au constructeur de la classe daction relative au boutontexte comme paramtre au constructeur de la classe daction relative au bouton

    Rcuprer le texte saisi dans JTextFieldimport javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JButton;import javax.swing.JTextField;import java.awt.FlowLayout;

    import javax.swing.AbstractAction;import java.awt.event.ActionEvent;import javax.swing.JOptionPane;public class ActionB1 extends AbstractAction {

    i t F t P i i l ftexte comme paramtre au constructeur de la classe d action relative au boutontexte comme paramtre au constructeur de la classe d action relative au boutonimport java.awt.event.ActionListener;

    public class FenetrePrincipale extends JFrame{private JTextField champText;public FenetrePrincipale( ){

    super( ); initialiser( ); }public JtextField getChamp( ) {

    return champText; }private void initialiser( ){

    private FenetrePrincipale f;public ActionB1(FenetrePrincipale f, String texte){ super(texte);

    this.f = f;}public void actionPerformed(ActionEvent e) {

    String t = f.getChamp().getText(); System.out.println(t); //affichage systme// ou dans une boite de dialogueJOptionPane.showMessageDialog(null, t) ;

    }

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 18

    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);

    } }

    }}

    JOptionPane boiteD = new JOptionPane();

    6. Les boites de dialogue 6. Les boites de dialogue --11 La classe La classe JOptionPaneJOptionPane fournit des faons simples de crer des fournit des faons simples de crer des

    dialogues dialogues

    4 types de boites de dialogue:4 types de boites de dialogue:zz Dialogue dinformationDialogue dinformation

    zz Dialogue de confirmationDialogue de confirmation

    zz Dialogue de saisieDialogue de saisie

    boiteD.showMessageDialog(parentComponent, message, title, messageType, icon)

    boiteD. showConfirmDialog(Component , message, title, optionType, messageType, icon)

    b i D h I Di l (C i l T i

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 19

    zz Dialogue avec boutons personnalissDialogue avec boutons personnaliss

    boiteD. showInputDialog(Component, message, title, messageType, icon, selectionValues, initialSelectionValue)

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

    boiteD. showOptionDialog(parentComponent, message, title, optionType, messageType, icon, options, initialValue)

    Les boites de dialogue Les boites de dialogue --22zz Type du message: (auquel est associ une icne par dfaut si aucune Type du message: (auquel est associ une icne par dfaut si aucune

    nest spcifie)nest spcifie) ERROR_MESSAGE ERROR_MESSAGE INFORMATION MESSAGE INFORMATION MESSAGE O O _ SS GO O _ SS G WARNING_MESSAGE WARNING_MESSAGE QUESTION_MESSAGEQUESTION_MESSAGE PLAIN_MESSAGEPLAIN_MESSAGE

    zz Type Type doptiondoption : : dfinitdfinit les les boutonsboutons qui qui vontvont apparatreapparatre dansdans la la boiteboite DEFAULT_OPTIONDEFAULT_OPTION YES_NO_OPTION YES_NO_OPTION YES_NO_CANCEL_OPTION YES_NO_CANCEL_OPTION OK_CANCEL_OPTION OK_CANCEL_OPTION

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 20

    ExemplesExemplesboiteD.showMessageDialog(null, " Le dossier nexiste pas", " erreur ",

    JOptionPane.ERROR_MESSAGE);

    Les boites de dialogue Les boites de dialogue --33int reponse = boiteD.showMessageDialog(null, " Etes vous sur dcraser le fichier?","??? ", JOptionPane.YES_NO_OPTION);if (reponse == JOptionPane.YES_OPTION)

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

    Sihem Ben Sassi Java Interfaces graphiques STIC L2 SR 21