35
Les Interfaces graphiques Les Swing

Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Embed Size (px)

Citation preview

Page 1: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Les Interfaces graphiques

Les Swing

Page 2: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Les interfaces graphiques: Introduction

Une application est une boîte noire. Prend des entrées et produit des sorties. Les utilisateurs ne sont pas des

programmeurs. Nécessité d’un mécanisme d’interaction

entre l’utilisateur et l’application:– Echanger les données.– Echange de contrôle.

Page 3: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Solution la plus basique: les Intput/output Stream

Vous pouvez passer par des objets de gestion de flux ou de données pour interagir avec l’utilisateur.

Saisir les données dans un fichier ou à partir du clavier (System.in, InputStream).

affichage des résultats sur la console ou dans des fichiers (System.out et OutputStream).

Page 4: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Inconvénients: Très lourde (beaucoup de code pour

peut de chose). Peu adaptée pour les interactions de

type contrôle. Pas du tout intuitive: il faut connaître

pour pouvoir l’utiliser certains types de données ne peuvent

être gérés en tant que flux.

Solution : Les interfaces graphiques

Page 5: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Faire une interface graphique...

1. Comment construire un écran graphique ?

1. Comment gérer les événements ?

1. Comment maintenir la cohérence entre les objets applicatifs / objets graphiques ?

Page 6: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

1. Définition des écrans !

Une application = plein d ’écrans graphiques Un écran graphique = 1 arbre de composants

graphiques La racine = La fenêtre Les feuilles = des composants atomiques

(button, List, TextField…) Les nœuds = des conteneurs (des zones pour

mettre des composants atomiques)

Page 7: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Exemple: très simple fenêtre :Frame

Bouton de commande: ButtonZone de texte:TextField

Caption: Label

Page 8: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Exemple : un arbre de composant graphique

nom : Label

post:TextField

????? ajout : Buttonl

saisir: Frame

Racine est écran

Les feuilles composants atomiques

Les nœuds des

containeurs

Page 9: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Étape1: Comment construire des écrans Graphiques ?

Java offre une « pléthora » de composantes graphiques.

Deux packages java.awt.*; javax.swing.*; Le package swing est une extension de awt On peut les classer selon trois catégories

– Les composantes écrans – Les composantes de gestion d’emplacement: les

containers– Les composantes graphiques atomiques.– Les composantes de type menus.

Page 10: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Une vue partielle sur le modèle de classe du package swing

JFrame

Panel(from awt)

JWindow

JButton(from awt)

JList

JTextField

Container(from awt)

JComponent(from awt)

component[]

TextComponent(from awt)

Lescomposantsatomiques

Une classe abstraite!

Les composantscomposites !

Pas de nouvelles fenêtres

Page 11: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Les composants graphique de haut niveau !

Les fenêtres graphique (Jframe)Les sous-fenêtre (JInternalFrame)Les containers Les composants de gestion d’emplacement (Les Layout).JPanel

Page 12: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

« Interface »WindowConstants

Les Fenêtres Graphiques (JFrame) La classe qui permet de créer des fenêtres C’est l’objet racine Sous classe de la classe Frame de awt. Elle maintient un objet de gestion de

composants.

JFrame

Frame(awt)

« Interface »RootPaneContainer

JRootPane

Page 13: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Les constructeurs de JFrame Deux constructeurs:

1. public JFrame()2. public JFrame(String titre)

Exemple:

public static void main(String[] args) {//mode d’affichage par défaut (mode java)JFrame.setDefaultLookAndFeelDecorated(true); Jframe e= new JFrame(« Ecran de saisie Employé");e.setSize(300,40);//spécification de la taille e. show(); //affiche la composante de type écran en mode java}

Hauteur=40

Largeur=300

Page 14: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Deuxième méthode

Parfois, vous avez besoin d’associer des données ou des méthodes à des écrans

Vous voulez une type de fenêtre personnalisée.

Solution: ………..l’héritage Exemple : créer une classe EcranEmp qui

prend en paramètre un employé dont le titre sera initialisé comme suit : ceci est l’écran de l’employé XXXX

public class Employé {String nom;…. public Employé(String n) {nom=n;} public String toString() {return nom;}}**********************************************************

public class EcranEmp extends JFrame {Employé emp; public EcranEmp(Employé emp) { super("ceci est l'écran de l'employé: "+emp.toString()); this.emp=emp;}}*****************************************************************

public static void main(String[] args){JFrame.setDefaultLookAndFeelDecorated(true);Employé emp=new Employé("Harry");EcranEmp eemp=new EcranEmp(emp);eemp.setSize(300,40);eemp.show();}

Page 15: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

qq méthodes de la classe Jframe Personnaliser le comportement du bouton de fermeture

– Par défaut rend la fenêtre invisible– setDefaultCloseOperation(int );– Trois constantes:

• JFrame.DISPOSE_ON_CLOSE• JFrame.DO_NOTHING_ON_CLOSE• JFrame.HIDE_ON_CLOSE• JFrame.EXIT_ON_CLOSE

Show() elle dessine la fenêtre et tous les objets appartenant a la fenêtre

setLocation(x,y); setLocationRelativeTo(Component); Pack() calcule automatiquement la taille minimale. setIconImage(new imageIcon(uriImage).getImage())

Page 16: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Quatre modèles d’affichagesJava Look & Feel GTK Look & Feel

MacOS Look & FeelWindows Look & Feel

•La gestion d’affichage est gérée par UIManager

•UIManager: intermédiaire entre les composantes java et le système d’affichage de la machine

•Trois modes : mode programme, commande en ligne ou en cours d’exécution

Méthode static : UIManager.setLookAndFeel(NomClassLookAndFeel)

try { //affichage mode GTK UIManager.setLookAndFeel( "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"); //affichage mode java UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { }

Page 17: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Comment ajouter des composants dans un JFrame?(1)

Chaque JFrame maintient un conteneur d’objets graphiques (Container).

Le container de JFrame est JRootPane. Le JRootPane maintient une hiérarchie de

conteneur comme suit:– JRootPane– JLayeredPane– JContentPane– JGlassPane

Page 18: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Comment ajouter des composants dans un JFrame?(2) il ne faut pas ajouter des composants

directement dans l’objet JFrame: passer par sont conteneur.

getContentPane(): Container Par défaut c’est le JContentPane. Utilisez la méthode add(Component). Vous pouvez ajouter tout sauf des

composants de Type JFrame. les objets sont ajoutés sur le plan JLayeredPane: en couche

Page 19: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Exemple: ajouter un label dans une fenêtre public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame emp=new JFrame( "fenêtre avec des composants dedans"); Container Con=emp.getContentPane();Con.add(new JLabel("je suis un composant Dans une fenêtre")); emp.pack();emp.show(); }

Page 20: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Cas particulier:Ajouter des sous-écrans:

Vous pouvez ajouter des sous fenêtres à une fenêtre.

Il faut changer le JContentPane par un JDesktopPane …..considérer la fenêtre comme l’écran de machine

Sous Classe de JLayeredPane….. Les sous fenêtres sont de type

JInternalFrame JInternalFrame se comporte exactement

comme un JFrame (ajouter des composants …..).

Page 21: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

JInternalFrame & JDesktopPane

public JDesktopPane(){}– Il maintient également toutes les méthodes et

constantes des containers– La méthode add est valable

Public JInternalFrame(String titre, boolean resizable, boolean closable, boolean maximazable).

Une fois fait Les JInternalFrame sont manipuler de la même manière que les JFrame: ajout passe par le JContentPane etc…

Page 22: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Exemple:

public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame emp=new JFrame("fenêtre intérieur"); emp.setContentPane(new JDesktopPane()); JInternalFrame sf1=new JInternalFrame("sous fenêtre 1",true,true,true); JInternalFrame sf2=new JInternalFrame("sous fenêtre 2",true,true,true); emp.getContentPane().add(sf1); emp.getContentPane().add(sf2);

sf1.setVisible(true); sf2.setVisible(true); sf1.setSize(100,40); sf2.setSize(100,40); emp.setSize(200,100); emp.show(); }

Page 23: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Comment placer les objets ? Une fenêtre dispose d’un ensemble de

containers. Le container des composants est JContentPane (getComponentPane).

Pas de placement absolu i.e. pas de button1 en x=3, y=4

Chaque container délègue la gestion des emplacements de composants à une Classe de type Layout

Page 24: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Les Layout & les Containeurs Chaque container dispose d’un

gestionnaire d’emplacement. Les gestionnaires d’emplacement sont:

– Celles de awt:• GridLayout• BorderLayout

– Spécifique à swing• BoxLayout• FlowLayout• SpringLayout

Page 25: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Comment changer le Layout

Chaque containeur maintient une méthode pour définir l’objet Layout.

Par défaut le JContentPanel maintient un FlowLayout.

ObjetContainer.setLayout(objetLayout) La méthode add(…) change de type de

paramètre selon les objets Layout

Page 26: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

BorderLayout Constructeur:

– public BorderLayout(); Divise le containeur en cinq parties

Add(« placement »,component)

Page 27: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Exemple:

public static void main(String [] args){JFrame.setDefaultLookAndFeelDecorated(true);JFrame layout=new JFrame("BorderLayout dans le ContentPane de la fenêtre");layout.getContentPane().setLayout(new BorderLayout());layout.getContentPane().add(BorderLayout.NORTH,new JButton("je suis au Nord"));layout.getContentPane().add(BorderLayout.SOUTH,new JButton("je suis au Sud"));layout.getContentPane().add(BorderLayout.CENTER,new JButton(« je suis au Centre"));layout.getContentPane().add(BorderLayout.EAST,new JButton("je suis à l'East"));layout.getContentPane().add(BorderLayout.WEST,new JButton("je suis à l'Ouest"));layout.pack();layout.show(); }

Page 28: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

GridLayout Positionner les objets graphiques dans

des cellules d’une grille i.e matrice. Découper l’espace de container en

cellule a espace égales. Il faut spécifier le nb ligne et colonne

dans le constructeur (la valeur 0 signifie une gestion dynamique).

Les objets sont ajoutés ligne par ligne de gauche à droite selon l’ordre d’ajout dans le programme.

Page 29: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Exemple:

Ecrire un programme qui affiche 6 boutons en grille:– Déclarer une fenêtre– Obtenir son JContentPane– Changer le gestionnaire d’emplacement en

gridLayout– Ajouter les 6 bouton.– Afficher la fenêtre

JFrame GLF=new JFrame("GridLayout exemple");

Container JCP=GLF.getContentPane();

GridLayout GL=new GridLayout(2,3)JCP.setLayout(GL);

for(int i=0;i<GL.getRows();i++) for(int j=0;j<GL.getColumns();j++) JCP.add(new JButton(i+","+j)); GLF.pack(); GLF.show();

Page 30: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Résumons nous:

Une fenêtre est un objet de type JFrame ou une de ses sous-classe.

Pour ajouter des composants graphique il faut passer par le Container:– getComponentPane() pour obtenir le container– add(Component) pour ajouter des objets graphiques

Pour gérer l’emplacement des objets dans le container utilisez les objets XXXXLayout.– Construire un objet XXXXLayout.– Affecter au container ContainerOb.setLayout(layoutOb).

Page 31: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Un autre container: JPanel Vous pouvez utiliser vos propre

container, mais…. Il faut les ajouter au container de la

fenêtre Le JPanel vous permet de gérer

l’espace dans une fenêtre. Il peuvent définir des formats de

placement différent. Vous ajoutez vos objets directement

dans le JPane.

Page 32: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

qq méthodes de JPanel

Constructeur – new JPanel()– New JPanel(Layout)

La méthode setLayout(Layout) La méthode add(Component) Les JPanel sont des composants et peuvent

s’imbriqués entre elles. Les JPanel n’apparaissent pas à l’ecran leurs rôle se

limite à une découpage d’une espace d’ffichage. Pour le rendre visible il faut ajouter un objet de type Border : setBorder(BorderFactory.xxxx)

Page 33: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Exemple: public static void main(String[] args) {// création de la fenêtre et récupération de son caontainer JFrame.setDefaultLookAndFeelDecorated(true);JFrame JPF=new JFrame("Jpanel Exemple");Container JCP=JPF.getContentPane();//changer le Layout et la couleur du fond du container de la fenêtreJCP.setLayout(new BorderLayout()); JCP.setBackground(Color.green); // construire le JPanel avec son objet LayoutJPanel panel=new JPanel(new GridLayout(2,2,10,10)); // ajout des composants graphiques panel.add(new JButton("0.0"));panel.add(new JButton("0.1"));panel.add(new JButton("1.0"));panel.add(new JButton("1.1"));panel.setOpaque(true);//ajout de la bordure et changer la couleur du fondpanel.setBackground(Color.yellow);panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK,3),"je suis un panel crée par utilisateur"));panel.setSize(100,100);//attention !!!!!!! ajout du JPanel au container de la fenêtre JCP.add(BorderLayout.SOUTH,panel);JPF.setSize(140,140);JPF.show();

Page 34: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Excercice1: Écrivez une méthode main() qui affiche

la fenêtre suivante:

Page 35: Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties

Solution: Créer un objet Jframe Mettre à jours le gestionnaire de placement

(GridLayout(2,1)). Mettre ajour la couleur de fond du panel de la

fenêtre Créer deux JPanel avec la bordure Mettre à jours les couleurs de fonds Ajouter les JPanel dans la fenêtre Enfin afficher la fenêtre

// création de la fenêtre et récupération de son caontainerJFrame.setDefaultLookAndFeelDecorated(true);JFrame JPF=new JFrame("Ecercice Jpanel");Container JCP=JPF.getContentPane();//changer le Layout et la couleur du fond du container de la fenêtreJCP.setLayout(new GridLayout(2,1,10,10));JCP.setBackground(Color.green);//Création de deux panel, mise à jours de leurs couleur de fondJPanel panel1=new JPanel();JPanel panel2=new JPanel();panel1.setBackground(Color.yellow);panel2.setBackground(Color.BLUE);// ajout de la bordure (ligne) et ajouter du texte panel1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK,3),"je suis un panel jaune vide"));panel2.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK,3),"je suis un panel bleue vide"));// ajout des deux JPanel au panel de la fenêtre JCP.add(panel1);JCP.add(panel2);JPF.setSize(120,220);JPF.show();