Interface graphique SWING

Institut Supérieur des Études Technologiques
1/45
100%
Rendu du PDF...
Page 1 sur 45Lecteur de document UniversityLib

Interface graphique SWING

Institut Supérieur des Études Technologiques · Computer Science - GUI Development · textbook

Interface graphique

SWING

ISET BIZERTE

CHALOUAH Anissa

Interfaces graphiques

Les interfaces graphiques assurent le dialogue entre les utilisateurs et une application.

Une interface graphique est formée d’une ou plusieurs fenêtres qui contiennent divers

composants graphiques (widgets) tels que :

Boutons

listes déroulantes

Menus

champ texte, …etc.

Les interfaces graphiques sont souvent appelés GUI d’après l’anglais GraphicalUser

Interface.

Mme CHALOUAH Anissa

3

Modèle d’une application graphique

Une application graphique est composée de 3 éléments:

Les composants graphiques élémentaires de l’application (Boutons, menu, Etiquettes,

zones de textes, zones de choix, …). Ce sont les widgets.

Le conteneur graphique global qui est une zone spatiale sur laquelle les composants

les

les conteneurs on distingue les Fenêtres,

les Frames,

sont placés. Parmi

panneaux, les boîtes de dialogues…

Le gestionnaire de présentation, dit LayoutManager, qui fixe la politique de placement

les gestionnaires, on distingue le

des composants sur le conteneur. Parmi

FlowLayout, BorderLayout, le GridLayout, …

Mme CHALOUAH Anissa

4

Les APIs

Plusieurs packages permettent de gérer les interfaces graphiques : AWT et SWING

(intégré à partir de la version 1.2).

AWT utilise des composants lourds, c'est à dire utilisant les ressources du système

d'exploitation, alors que Swing utilise des composants dits légers n'utilisant pas ces

ressources.

Swing est plus robuste que l'AWT, plus portable, et plus facile à utiliser.

Swing ne remplace pas complètement AWT mais fournit des composants d'interface plus

performants et plus ergonomiques.

Mme CHALOUAH Anissa

5

Concepts de bases

Les composants (components)

Les éléments constituant les interfaces graphiques sont appelés composants (ce sont des boutons, des

textes, des images, ...).

Les conteneurs (containers)

 Certains composants sont capables d’en accueillir d’autres, ce sont les conteneurs.

 les conteneurs sont des descendants de la classe Container.

Les gestionnaires de placement(Layouts)

 Le placement des composants dans les container est souvent confié à un gestionnaire de placement.

Les gestionnaires d’évènements

Les actions de l’utilisateur sont représentées par des événements.

Le programme peut modifier son comportement en fonction de certains événements.

Méthodes de la classe Component

setVisible(boolean visible) affiche ou masque le composant

getSize() donne la dimension actuelle du composant, retourne le type Dimension qui est utilisable ainsi :

getSize().height et getSize().width

getPreferedSize() donne la taille "idéale" du composant, retourne le type Dimension

setSize(Dimension d) redimensionne le composant à la dimension indiquée

setSize(int largeur, int hauteur) redimensionne le composant

move(int coordX, int coordY) déplace le composant au point indiqué (coin haut et gauche)

setEnabled(boolean actif) active ou non le composant, c'est à dire le rend sensible aux

événements.

setForeground(Color couleur) définit la couleur d'avant-plan (de dessin) du composant

setBackground(Color couleur) définit la couleur de fond

Mme CHALOUAH Anissa

7

Conteneur

(Container)

Hiérarchie

Les conteneurs primaires

(Top-Level containers)

►Les conteneurs primaires sont les seuls composants qui sont

dessinés par le système d’exploitation, ce sont donc des

composants lourds.

►Toute application graphique doit utiliser un conteneur

primaire.

►Trois types de conteneurs primaires existent :

► les fenêtres (JFrame et Jwindow)

► les boites de dialogues (JDialog)

► les applets (JApplet)

Les conteneurs primaires

(Top-Level containers)

Les quatre conteneurs primaires sont construit sur le même modèle.

La couche supérieure est un le GlassPane, un panneau transparent qui est utilisé

pour la gestion des évènements.

Sous ce panneau se situe le contentPane qui accueille les composants graphiques.

Le contentPane contient aussi une barre de menu, accessible via la méthode

setJMenuBar,

Il est contenu par le LayeredPane qui peut être utilisé pour empiler des composants

à des “profondeurs” différentes.

Tous ces éléments sont contenu dans un élément principal de type JRootPane.

JWindow

La classe JWindow permet de créer une fenêtre graphique dans le système de fenêtrage

utilisée.

Cette fenêtre n’a aucune bordure et aucun bouton. Elle ne peut être fermée que par le

programme qui l’a construite

import javax. swing. JWindow ;

public class TestJWindow {

public static void main( String [] args) {

JWindow fen = new JWindow ();

fen.setSize (300 ,300);

fen.setLocation(500 ,500);

fen.setVisible( true);

}

}

Fenêtre : JFrame

Publicité

Conteneur d'une application avec barre de titre et des boutons de fermeture, plein

écran, iconification.

Importer la classe javax. swing. JFrame ;

Constructeur

JFrame()

JFrame(String)

Rôle

Création d'une instance

Création d'une instance en précisant le titre

Fenêtre : JFrame

Méthode

setTitle(String titre)

String getTitle()

void setIconImage(Image img)

setMenuBar(MenuBar)

setResizable(boolean)

Rôle

spécifie le titre du cadre

Obtient le titre du cadre

définit l'image qu'il faut afficher quand ce cadre

est iconifié

applique une barre de menu en haut du cadre

définit la possibilité pour l'utilisateur de

modifier la taille de la fenêtre

Les événements générés par le composant JFrame sont : WindowOpened,

WindowClosing, WindowClosed, WindowIconified, WindowDeiconified,

WindowActivated, WindowDeactivated.

JFrame : 2 manières de créer une JFrame

import javax. swing. JFrame ;

public class MaFenetre {

import javax. swing. JFrame ;

public class MaFenetre extends JFrame {

public MaFenetre(){

public MaFenetre(){

JFrame fen = new JFrame ("Ma première fenêtre");

fen . setSize (500 ,200);

fen . setVisible( true);

fen . setLocation(500 ,500);

}

public static void main( String [] args) {

MaFenetre f=new MaFenetre();

}

}

super ("Ma première fenêtre");

setSize (500 ,200);

setVisible( true);

setLocation(500 ,500);

}

public static void main( String [] args) {

MaFenetre f=new MaFenetre();

}

}

JDialog

Boites de dialogue : JOptionPane(1)

Le composant complexe JOptionPane permet de créer une fenêtre de dialogue

(fenêtre séparée ou pop-up) qui servira à afficher un message ou à obtenir des

informations de la part de l'utilisateur.

La classe JOptionPane crée automatiquement un conteneur de haut niveau JDialog

pour afficher les informations et recevoir les réponses de l'utilisateur.

Une fenêtre JOptionPane comprend 4 zones (optionnelles)

Message

Icône

Entrée

Bouton

Boites de dialogue : JOptionPane (2)

Les fenêtres de dialogue peuvent être divisées en quatre catégories différentes :

Message : Affichage d'un message d'information

Input : Saisie d'une information entrée par l'utilisateur

Confirm : Demande de confirmation (Ok, Oui, Non, Annulation)

Option : Choix d'une option spécifique (parmi une liste de boutons)

Les méthodes statiques showTypDialog() créent des fenêtres de dialogue de haut-niveau. Ces

fenêtres sont modales (ce qui signifie que le focus ne peut pas être transféré à un composant d'une

autre fenêtre de l'application sans fermer la fenêtre de dialogue).

Le premier paramètre (de toutes les méthodes showTypDialog()) indique à quel composant (parent) la

fenêtre de dialogue est liée ce qui détermine sa dépendance et son positionnement (si null, la fenêtre

est centrée à l'écran).

Boites de dialogues

JOptionPane : message

Ce sont les boites de dialogue les plus simple, elles informent l’utilisateur en affichant un

texte simple et un bouton de confirmation.

JOptionPane.showMessageDialog(fen,"Un message");

On peut modifier l’aspect de la fenêtre en fonction du type de message, par exemple pour

afficher un dialogue d’avertissement :

JOptionPane.showMessageDialog(fen,"Problème de réseau",

"Connexion au réseau impossible.",JOptionPane.WARNING_MESSAGE);

Boites de dialogues

JOptionPane : input

La méthode showInputDialog affiche une boite de dialogue comprenant une entrée de

saisie (JTextField) en plus des boutons de validation.

Après validation elle retourne une chaîne de caractères (String) si l’utilisateur a cliqué

sur OK, sinon elle renvoie null.

String rep = JOptionPane. showInputDialog(fen," Entrez votre nom d utilisateur");

Boites de dialogues

JOptionPane : confirm

Les boites de dialogues peuvent aussi être utilisées pour demander un renseignement à

l’utilisateur.

Les méthodes showConfirmDialog() affichent des fenêtres qui comportent des boutons de

type Cancel", "Yes", "No" (différentes combinaisons sont possibles sur la base des

constantes (option type)

Définies dans la classe JOptionPane. Ces méthodes retournent une valeur entière

correspondant à une des constantes de JOptionPane (CANCEL_OPTION, CLOSED_OPTION,

NO_OPTION, YES_OPTION, OK_OPTION).

int i=JOptionPane.showConfirmDialog(fen,"Choisir une réponse");

if (i==JOptionPane.YES_OPTION) {...}

Boites de dialogues

JOptionPane : option

Les méthodes showOptionDialog() permettent de transmettre un tableau d'objets qui

seront affichés sous forme deboutons (ils remplacent les boutons standard de

showConfirmDialog()).

Publicité

Ces méthodes retournent une valeur entière correspondant à l'indice du tableau

identifiant l'objet qui a été sélectionné (ou CLOSED_OPTION).

String[] tab = {"Froid", "Tiède", "Chaud"};

int i = JOptionPane.showOptionDialog(fen,"Vos préférences ?", "Options"

,JOptionPane.DEFAULT_OPTION,JOptionPane.QUESTION_MESSAGE, null,

Type d’option : pas utilisé si options définies

tab, tab[1]);

Type de message : question

icône

Valeur

initiale

Les conteneurs secondaires

Les composants

(component)

Les étiquettes : JLabel

Les étiquettes sont des composants graphiques capables d'afficher un texte et/ou une

image

Importer javax.swing.JLabel

Constructeurs

JLabel()

JLabel(Icon)

JLabel(Icon, int)

JLabel(String)

JLabel(String, Icon, int)

JLabel(String, int)

Rôle

Création d'une instance sans texte ni image

Création d'une instance en précisant l'image

Création d'une instance en précisant l'image et l'alignement

horizontal

Création d'une instance en précisant le texte

Création d'une instance en précisant le texte, l'image et

l'alignement horizontal

Création d'une instance en précisant le texte et l'alignement

horizontal

Jlabel : Exemple

JLabel l1 = new JLabel("Etiquette 1");

JLabel l2 = new JLabel( ); l2.setText("Etiquette 2");

JLabel l3 = new JLabel("Etiquette et image", new ImageIcon("/img/duke.gif"),JLabel.CENTER );

Les boutons : JButton

Le composant JButton permet d'afficher un bouton qui peut comprendre un texte

(libellé), une icône (image) ou les deux à la fois.

Importer javax.swing.JButton

Constructeur

JButton()

JButton(String)

JButton(Icon)

JButton(String, Icon)

Rôle

préciser le texte du bouton

préciser une icône

préciser un texte et une icône

Un bouton permet donc de déclencher des actions (activités).

Jbutton : Exemple

JButton bt1 = new JButton("Text only");

JButton bt2 = new JButton(new ImageIcon("icone.png"));

JButton bt3 = new JButton("Text and icon",new ImageIcon("icone.png"));

Les cases à cocher : JCheckBox

Le composant JCheckBox est une sous-classe de JToggleButton et représente une case à cocher qui

peut prendre deux états (sélectionné/non-sélectionné).

L'utilisation des composants JCheckBox permet de saisir un certain nombre d'options parmi une liste

de choix non-exclusifs.

Importer javax.swing.JCheckBox

Constructeur

JCheckBox(String)

JCheckBox(String, boolean)

JCheckBox(Icon)

JCheckBox(Icon, boolean)

JCheckBox(String, Icon)

JCheckBox(String, Icon, boolean)

Rôle

précise l'intitulé

précise l'intitulé et l'état

spécifie l'icône utilisée

précise l'intitulé et l'état du bouton

précise l'intitulé et l'icône

précise l'intitulé, une icône et l'état

JCheckBox : Exemple

Méthodes

 boolean isSelected() : retourne true si la case est sélectionnée, false sinon,

 Void setSelected(boolean) : permet de modifier l’état d’une case à cocher

JCheckBox c1 = new JCheckBox("Pomme ");

JCheckBox c2 = new JCheckBox(" Orange", true);

JCheckBox c3 = new JCheckBox("Raisin ");

pan.add(c1);

pan.add(c2);

pan.add(c3);

if (c1.isSelected()==true)

System.out.println("Pomme séléctionnée");

else if (c2.isSelected()==true)

System.out.println("Orange séléctionnée");

else

System.out.println("Raisin séléctionné");

Les boutons radio : JRadioButton

Les boutons radio JRadioButton sont des boutons à choix exclusif, il permettent de choisir un (et un

seul) élément parmi un ensemble.

Pour obtenir ce comportement, il suffit d'insérer les composants JRadioButton (mutuellement

exclusifs) dans un groupe de boutons représenté par un objet de la classe ButtonGroup.

Importer javax.swing.JRadioButton

Constructeur

JRadioButton(String)

JRadioButton(String, boolean)

JRadioButton(Icon)

JRadioButton(String, Icon)

JRadioButton(String, Icon, boolean)

Rôle

précise l'intitulé du bouton radio

précise l'intitulé et l'état

spécifie l'icône utilisée

Publicité

précise l'intitulé et l'icône

précise l'intitulé, une icône et l'état

ButtonGroup

La classe ButtonGroup permet de grouper (logiquement) des boutons qui sont

enregistrés dans le groupe à l'aide de la méthode add().

Si un bouton est inséré dans un groupe de boutons, la sélection de l'un d'eux

provoquera automatiquement la désélection de tous les autres membres du groupe

(permet de garantir une seule sélection parmi un choix d'options mutuellement

exclusives).

En principe, l'insertion dans un groupe de boutons devrait être réservée exclusivement

aux boutons de type JRadioButton.

ButtonGroup & JRadioButton : Exemple

public class TestRadio extends JPanel {

JRadioButton plat1 , plat2 , plat3;

ButtonGroup plat;

public TestRadio(){

plat1 = new JRadioButton("Tajine");

plat2 = new JRadioButton(" couscous");

plat3 = new JRadioButton(" Mechoui ",true);

plat = new ButtonGroup();

plat.add ( plat1);

plat.add ( plat2);

plat.add ( plat3);

this.add ( plat1);

this.add ( plat2);

this.add ( plat3);

this. setBorder( BorderFactory.

createTitledBorder(" Plat du jour"));

};

}

public class PlatDuJour{

public static void main( String [] args) {

JFrame fen = new JFrame ("Exemple de boutons radios"

TestRadio panneau = new TestRadio();

fen. setContentPane( panneau );

fen. pack ();

fen. setVisible( true);

}

}

Les listes de choix : JList

Le composant JList permet de présenter à l'utilisateur une liste d'éléments parmi

lesquels il peut en sélectionner un ou plusieurs.

Le composant JList affiche en permanence le contenu de la liste. Si tous les éléments ne

peuvent être affichés, il faut offrir une barre de défilement (JScrollPane) pour parcourir

les éléments de la liste

Les champs textes : JTextField

Un composant pour afficher, saisir et éditer une ligne de texte simple.

Importer javax.swing.JTextField

Constructeur

JTextField()

JTextField(int)

JTextField(String)

JTextField(String,int)

Méthodes :

Rôle

Création d’un champ texte

spécification du nombre de caractères à saisir

avec texte par défaut

avec texte par défaut et nombre de caractères à saisir.

 String getText( ) : lecture de la chaine saisie.

 Void setColumns () : Fixer la largeur du champ

 int getColumns( ) : lecture du nombre de caractères prédéfini

JTextField : Exemple

JPanel pan = new JPanel ();

JLabel lNom = new JLabel (" Entrez votre nom :");

JTextField tfNom = new JTextField();

tfNom. setColumns(15);

pan .add ( lNom);

pan .add ( tfNom);

Zone texte : JTextArea

Le composant JTextArea permet d’afficher un texte sur plusieurs lignes

Importer javax.swing.JTextArea

Constructeur

JTextArea()

JTextArea( int, int )

JTextArea( String )

JTextArea( String, int, int )

Rôle

avec spécification du nombre de lignes et de colonnes

avec texte par défaut

avec texte par défaut et taille

Méthodes

Void setLineWrap(boolean) : gère le retour à la ligne automatique

Void setEditable (boolean) : Pour rendre la zone de texte éditable ou pas

JTextArea : Exemple

JTextArea taNotes = new JTextArea();

taNotes.setColumns(20);

taNotes.setLineWrap(true);

taNotes . setText (" ISET de Bizerte est un établissement public à caractère

scientifique et technologique. Sa principale mission consiste à contribuer au

développement socio-économique et au transfert technologique dans la région de

Bizerte ainsi que le renforcement de l'employabilité et l’insertion professionnelle

des diplômés de l’enseignement supérieur. ");

taNotes . setEditable( false );

pan .add ( taNotes );

Les gestionnaires de présentation (Layout)

Les gestionnaires de présentation

Gère la disposition des composantes filles dans un conteneur

Les gestionnaires par défaut sont

BorderLayout pour

► Window

► Frame

► Dialog

FlowLayout pour

► Panel

► Applet

Gestionnaire d’évènements