Vous êtes sur la page 1sur 39

Université Cadi Ayyad

Ecole Supérieure de Technologie – Safi

Cours de la programmation orientée


objet (JAVA)

: Cours 7

Pr. EL ABDELLAOUI SAID


Elabdellaoui.said@yahoo.fr

Said El Abdellaoui Programmation Orientée Objet : Java 2017 / 2018


GÉNÉRALITÉ
2

Interface
Utilisateur

 Construire fenêtre graphique : Objets graphiques, Affichage …


 Programmation par événement : Comment faire pour que le programme réagisse?
 Principe Modèle-Vue-Contrôle

gère les données


affiche les données
communication et MAJ

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
GÉNÉRALITÉ
3

 Java propose deux boîtes à outils graphiques :


 AWT (Abstract Window Toolkit), simple, petite et limitée
 SWING, cohérente, grosse et extensible.
 Les deux peuvent s'utiliser dans les applets.
 SWING
 Package javax.swing;
 Fait parti du Java Foundation Classes (JFC).
 Fournir un riche ensemble de composants GUI : Boutons, Listes, étiquettes, zones de texte …
 SWING offre plusieurs mécanismes originaux, pratiques et puissants
 SWING peut se programmer à plusieurs niveaux

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
GÉNÉRALITÉ
4

import javax.swing.*; Importer le package


public class HelloWorld {
public static void main (String[] args) {
Créer un objet
JFrame f = new JFrame("Hello World");
graphique
// f.setTitle("Hello World");
//Composants ajoutés au frame courant.
f.setSize(300,200); Définir la taille
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
300px
f.setVisible(true);
}
}

Afficher 200px

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
MÉTHODES SWING
5

 setLocation (int,int) : Modifier la position de la fenêtre.


 setAlwaysOnTop (boolean) : Toujours au premier plan.
 setResizable (boolean) : Permettre ou interdire le redimensionnement de la fenêtre.
 setTitle (String) : Modifier le titre.
 setVisible (boolean) : La visibilité de la fenêtre.
 setDefaultCloseOperation (f.HIDE_ON_CLOSE)
 (f.DISPOSE_ON_CLOSE);
 (f.DO_NOTHING_ON_CLOSE);
 (f.EXIT_ON_CLOSE);

 Size() : Dimensions de la fenêtre.


 setBackground(Color.yellow) : Modifier la couleur d’arrière-plan.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
GÉNÉRALITÉ
6

import javax.swing.*;
public class HelloWorld {
public static void main (String[] args) {
JFrame f = new JFrame("Hello World");
f.setSize(300,200);
Container c= f.getContentPane();
Color couleur= new Color(208,255,208);
//c.setBackground(Color.YELLOW);
c.setBackground(couleur);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
OBJETS GRAPHIQUES
8

Définir des fenêtres :


JApplet, JDialog, JFrame, JWindow
3 niveaux

Composer la fenêtre :
JPanel, JScrollPane, JSplitPane, …

Eléments de base :
JButton, JCheckBox, JTextField,
JTextArea, …

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
HELLO WORLD
9

import javax.swing.*;
public class HelloWorld {
public static void main (String[] args) { Niveau supérieur
JFrame f = new JFrame("Hello World");
JLabel label = new JLabel("Bonjour"); Composante de base
JPanel p = (JPanel)f.getContentPane();
p.add(label); Niveau
p.setBackground(java.awt.Color.white); intermédiaire
f.setSize(300,200); //alternative: f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
HELLO WORLD
10

import javax.swing.*;
public class HelloWorld {
public static void main (String[] args) {
JFrame f = new JFrame("Hello World");
JLabel label = new JLabel("Bonjour");
JPanel p = (JPanel)f.getContentPane();
p.add(label);
p.setBackground(java.awt.Color.white);
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
COMPOSITION D’UN FENÊTRE
11

(a) : créer une fenêtre

Associer (b) à (a) Afficher

(b) : créer un ou plusieurs


composants intermédiaires

Insérer (c) dans (b)

(c) : créer des composantes de base

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
COMPOSANTES DE BASE
12

 JButton.

 JCheckBox.

 JRadioButton.

 JComboBox.

 Jlist.
JList

 JTextField.

 Jlabel.

 Jtable.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
JBUTTON
13

 Bouton simple qu’on peut lui associer des événements

 JButton jb= new JButton("OK"); //ou


 JButton jb = new JButton("OK", new ImageIcon("icon.gif"));
 jb.setRolloverIcon(new ImageIcon("icon.gif")); //Permet de
specifier l’image à afficher sur le bouton lorsqu’il est survolé
 jb.setPressedIcon(new ImageIcon("icon.gif")); //Permet de
specifier l’image à afficher sur le bouton lorsqu’il est pressé
 jb.setDisabledIcon(new ImageIcon("icon.gif"));
 jb.setIcon(new ImageIcon ("icon.gif"));
 jb.setMnemonic('o'); // ALT + o
 jb.setBorderPainted(false);
 jb.SetBackground(Color.white);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
JLABEL
14

 Étiquette pouvant contenir du texte et image

 JLabel jl = new JLabel ("Label 1");


 System.out.println(jl.getText());
 jl.setIcon(new ImageIcon("java.gif"));
 jl.setVerticalTextPosition(SwingConstants.BOTTOM)
 jl.setHorizontalTextPosition(SwingConstants.CENTER);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
JTEXTFIELD
15

 Champ de texte

 JTextField jt = new JTextField( "Zone Texte");


 String nom = jt.getText();
 jt.setText(nom);
 jt.setColumns(nom.length());
 String x = jt.getSelectedText();

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
JTEXTFIELD
16

Champ de texte

 JTextField jt = new JTextField(“Zone Texte”);


 String nom = jt.getText();
 jt.setText(nom);
 jt.setColumns(nom.length());
 String x = jt.getSelectedText();

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
JMACHINBUTTON
17

 JCheckBox
 cases à cocher

 JRadioButton
 dans un groupe de boutons “radio”

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
JMACHINBUTTON
18

 Liste déroulante (ouverte ou fermée)


 vector ou tableau d’objets passés en paramètres
 JComboBox cb = new JComboBox(items);
 cb.setMaximumRowCount(4);
 cb.setEditable(true); // JTextField
 cb.addItem("hello");
 cb.addItem(1);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
JMACHINBUTTON
19

 Activation / Désactivation
 isEnabled() / setEnabled(…)
Visible / Invisible
 setVisible(true/false); isVisible();
Tailles réelle et souhaitable
 Dimension getSize(); setSize(…)
 Dimension getPreferredSize() ;
 setPreferredSize(Dimension r);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
COMPOSANTES INTERMÉDIAIRES
20

Utilisés pour organiser ou positionner d’autres composants (de base) :


 JPanel utilisé pour regrouper d’autres composants.
 JScrollPane fourni une vue avec les scroll bars.
 JSplitPane divise en 2 composants.
…

La technique standard,


JPanel p = new JPanel(); Permet plus de flexibilité,
p.add(new JButton("on"));
p.add(new JButton("off"));
Le JPanel peut être ajouté à d’autres
structures pour modifier ou étendre
l’application.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
HIÉRARCHIE SWING
21

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
EXEMPLE JFRAME
22

On veut créer une Jframe avec un bouton dedans.

JFrame f = new JFrame(“Exemple de JFrame");


JButton b = new JButton(“OK");
JPanel cp = (JPanel)f.getContentPane();
cp.add(b);

JFrame f = new JFrame(" Exemple de JFrame ");


JButton b = new JButton(“OK");
f.getContentPane().add(b);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
COMPOSITION DE JFRAME
23

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
JMENU
24

Une instance de JMenuBar par Jframe


•setJMenuBar(JMenuBar mb);
Plusieurs Jmenu par JMenuBar
•add(JMenu jm);
Plusieurs JMenuItem/JCheckboxMenu par Jmenu
•add(JMenuItem mi);
•addSeparator();

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
CONTENEURS
25

Dialog Tabbed Pane Frame Split pane

Tool bar

Internal frame
Layered pane

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
AUTRES COMPOSANTS DE BASE
26

File chooser Color chooser

Progress bar

Tool tip
Slider

Tree
SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017
2016 2016
PROBLÈMES DE PLACEMENT
27

 Le placement est calculé au dépend des conteneurs.


 Soit les composants sont placés explicitement (x, y, largeur, hauteur)
 Soit ils sont gérés par un LayoutManager qui calcul ces paramètres dynamiquement
 besoins des (taille min, max, normale) du composant & positionnement relatif.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
GESTIONNAIRES DE PLACEMENT
28

 FlowLayout
 Place les composants de gauche à droite.
 CardLayout

 Superpose les composants.


 GridLayout

 Découpe en une grille régulière sur laquelle les composants


sont placés.
 GridBagLayout

 Découpe en une grille et place les composants sur une ou


plusieurs cases.
 BorderLayout

 Découpe en 5 régions: south, north, east, west, center.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
GESTIONNAIRES DE PLACEMENT
29

 FlowLayout
 Place les composants de gauche à droite.
 CardLayout

 Superpose les composants.


 GridLayout

 Découpe en une grille régulière sur laquelle les composants


sont placés.
 GridBagLayout

 Découpe en une grille et place les composants sur une ou


plusieurs cases.
 BorderLayout

 Découpe en 5 régions: south, north, east, west, center.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
GESTIONNAIRES DE PLACEMENT
30

 FlowLayout
 Place les composants de gauche à droite.
 CardLayout

 Superpose les composants.


 GridLayout

 Découpe en une grille régulière sur laquelle les composants


sont placés.
 GridBagLayout

 Découpe en une grille et place les composants sur une ou


plusieurs cases.
 BorderLayout

 Découpe en 5 régions: south, north, east, west, center.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
GESTIONNAIRES DE PLACEMENT
31

 FlowLayout
 Place les composants de gauche à droite.
 CardLayout

 Superpose les composants.


 GridLayout

 Découpe en une grille régulière sur laquelle les composants


sont placés.
 GridBagLayout

 Découpe en une grille et place les composants sur une ou


plusieurs cases.
 BorderLayout

 Découpe en 5 régions: south, north, east, west, center.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
PROBLÈMES DE PLACEMENT
32

 Le placement est calculé au dépend des conteneurs.


 Soit les composants sont placés explicitement (x, y, largeur, hauteur)
 Soit ils sont gérés par un LayoutManager qui calcul ces paramètres dynamiquement
 besoins des (taille min, max, normale) du composant & positionnement relatif.

 Aucun LayoutManager utilisé setBounds(x,y,h,l);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
EXEMPLE JFRAME
33

 On se propose de réaliser une simple fenêtre avec deux champs texte pour lire deux valeurs de X
et Y, et un bouton pour calculer la somme des deux valeurs et l’afficher dans un autre JLabel.

300 px

260px

100px
200 px

140px
20px

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
EXEMPLE JFRAME
34

import java.awt.*;
import javax.swing.*;
public class Fenetre extends JFrame {
private JPanel P;
private JPanel jPanel; Composantes de base
private JLabel Etiq1, Etiq2, EtiqR;
private JTextField ZText1;
private JTextField ZText2;
private JButton Bouton1;


}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
EXEMPLE JFRAME
35

import java.awt.*;
import javax.swing.*;
public class Fenetre extends JFrame {
private JPanel P;
private JPanel jPanel; Composantes de base
private JLabel Etiq1, Etiq2, EtiqR;
private JTextField ZText1;
private JTextField ZText2;
private JButton Bouton1;

public Fenetre() {
super(); Constructeur
this.setSize(300, 200);
this.setContentPane(this.getJContentPane());
this.setTitle("X + Y Résultat");
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
AUTRES COMPOSANTS DE BASE
36

 Un composant enregistre des auditeurs d’évènements(Listeners).


 Lorsqu’un événement se produit dans un composant, il est envoyés aux Listeners enregistrés.
 Chaque auditeur définit les actions à exécuter dans des méthodes aux noms prédéfinis.
 Exemple :
 Un Bouton enregistre des ActionListener
 Lors d’un clic sur un bouton, un ActionEvent est envoyé aux ActionListener enregistrés.
 Ceci provoque l’exécution de la méthode actionPerformed de chaque ActionListener.
 Associer événement au bouton

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
EXEMPLE JFRAME
37

Bouton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
EtiqR.setText(ZText1.getText() + ZText2.getText());
}
});

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
EXEMPLE JFRAME
38

Bouton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
int Resultat =
Integer.parseInt(ZText1.getText())+Integer.parseInt(ZText2.getText());
EtiqR.setText(Resultat);
}
});

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016
EXEMPLE JFRAME
39

Bouton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
int Resultat =
Integer.parseInt(ZText1.getText())+Integer.parseInt(ZText2.getText());
EtiqR.setText(Resultat+ "");
}
});

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2015 / 2017


2016 2016