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

Universite Paris Diderot

Licence Informatique

Programmation Orientee Objet


Annee 2008-2009

TP n7
Introduction `a SWING
Dans ce TP nous nous proposons dimplementer une petite interface graphique en vue de
manipuler la classe ListeDeDocuments programmee au TP4. Cette interface comportera
une liste deroulante pour choisir le type de document,
un champ pour saisir le titre du document,
un bouton permettant de soumettre le document, et qui provoquera la demande de renseignements complementaires (nombre de pages, auteurs,...)
un bouton permettant dimprimer la liste des documents dans un fichier.
la plupart des classes que nous allons utiliserse trouvent dans les packages javax.swing
et java.awt On peut definir differents types de fenetres en Swing. Nous allons utiliser la plus
evoluee, la JFrame. On peut utiliser cette classe directement en faisant appel `a son constructeur
pour generer une fenetre.
Exercice 1 [fenetre minimale]
Ecrire une classe Bibliotheque contenant une fonction main permettant de visualiser votre
fenetre. Pour cela vous devez :
1. creer une instance de JFrame (noubliez pas dimporter JFrame),
2. appeler la methode setVisible(boolean b) sur lobjet JFrame, de mani`ere `a rendre cette
fenetre visible.
Cependant, nous souhaitons obtenir des fenetres plus evoluees que celle que vous avez vue
apparatre en executant votre code. La classe JFrame poss`ede de nombreuses methodes permettant de donner `
a votre fenetre les caracteristiques que vous souhaitez. Parmi ces methodes :
setTitle(String letitre)
setSize(int largeur,int longueur)
setLocationRelativeTo(Component c), le param`etre null place la fenetre au milieu de
lecran
setResizable(Boolean b)
setDefaultCloseOperation(int operation), setDefaultCloseOperation permet de
definir loperation par defaut que lon veut lorsque lon ferme la fenetre. Le param`etre
JFrame.EXIT_ON_CLOSE specifie que lon quitte lexecution du programme lorsque lon
ferme la JFrame.
Nous pourrions modifier lobjet JFrame que nous avons defini dans lexercice 1. Neanmoins,
afin de creer un mod`ele de fenetre, nous definissons une classe Fenetre_Bibliotheque etendant
la classe JFrame, et nous utilisons les fonctions ci-dessus dans le constructeur.
Exercice 2 [Mise en forme dune Fenetre]
1. Ecrire une classe Fenetre_Bibliotheque qui etend la classe JFrame, et definissez y un
constructeur minimal. Noubliez pas les imports necessaires `a cette definition.
2. Enrichissez votre constructeur permettant de generer des fenetres ayant les caracteristiques
que vous souhaitez.
1

3. Modifiez votre classe Bibliotheque afin de creer une instance de Fenetre_Bibliotheque


et de la faire apparatre.
Maintenant que nous pouvons afficher une fenetre, nous allons la remplir. Une JFrame est
decoupee en plusieurs parties : le RootPane, le LayeredPane, la MenuBar, le ContentPane et
le GlassPane. Nous nallons pas toutes les utiliser. Pour remplir la fenetre nous allons utiliser le ContentPane. Ainsi pour ajouter un contenu `a la fenetre on fait appel `a la methode
setContentPane(Container c). Il faut donc creer un tel Container. Nous allons utiliser un
JPanel (une classe qui etend Container).
On peut declarer un objet de type JPanel avec son constructeur par defaut. Pour ajouter des
elements `a un tel objet, on peut faire appel `a la methode add(Component c) o`
u le Component
peut etre un Layout, un JLabel, JComboBox, ... Nos allons en parler par la suite.
Le JPanel doit contenir un Layout pour gerer le placement des elements de la fenetre.
Il existe differents types de gestionnaires de placements : FlowLayout, BorderLayout, CardLayout, GridLayout, GridBagLayout,... Nous nous proposons ici dutiliser le GridLayout, dont
le constructeur peut prendre en param`etre deux entiers indiquant le nombre minimum de lignes
et le nombre de colonnes.
Pour creer un element contenant du texte vous devez creer un objet de type JLabel, en
passant en param`etre `
a son constructeur la chane de carat`ere que vous voulez afficher, puis
ajouter cet objet `
a votre JPanel.
Exercice 3 [Mise en forme du contenu de la fenetre] Dans les questions suivantes, noubliez
pas dimporter les classes ou les packages necessaires.
1. Definissez une methode sans param`etre buildContentPane() retournant un JPanel. Dans
cette methode, declarez un objet monPanel instancie avec le constructeur sans param`etre
de JPanel et retournez cet objet.
2. Donnez un Layout `
a votre JPanel en appelant la methode setLayout(Layout l) sur
lobjet monPanel. Pour obtenir un le Layout on fait appel au constructeur de GridLayout.
3. Donnez une couleur `
a monPanel avec la fonction setBackground(Color c). Pour passer
une couleur en param`etre `
a cette fonction, vous pouvez importer et utiliser la classe Color.
Elle se trouve dans le package java.awt
4. Declarez un objet label de type JLabel en passant en param`etre de son constructeur une
chane de caract`eres que vous souhaitez afficher.
5. Ajouter label `
a votre panel.
6. Dans le constructeur de Fenetre_Bibliotheque ajoutez monPanel en utilisant
setContentPane(Container c) et en lui passant en param`etre votre fonction.
Pour creer une liste deroulante on ajoute un champ des JComboBox. Le constructeur JComboBox
prend en param`etre des objets de type DefaultComboBoxModel. Nous allons creer une classe
etendant DefaultComboBoxModel afin dajouter les elements de la listes que nous souhaitons.
Exercice 4 [Liste deroulante]
1. Creez une classe LivreModel etendant la classe DefaultComboBoxModel (elle se trouve
dans le package javax.swing ) contenant un champ operateurs de type ArrayList<String>.
2. Declarez un constructeur pour LivreModel permettant dajouter "Dictionnaire" et
"Livre" `
a operateurs.
3. Declarez des methodes public Object getElementAt(int index) retournant lelement
dindice index de operateurs, et public int getSize() retournant la taille de operateurs.
Ces methodes seront utilisees dans Fenetre_Bibliotheque.
2

4. Ajoutez un champ liste de type JComboBox dans Fenetre_Bibliotheque.


5. Dans la methode buildContentPane() de Fenetre_Bibliotheque, affectez le champ
liste avec le constructeur de JComboBox qui prend en param`etre un objet de type
LivreModel. Ajoutez liste `
a monPanel.
Pour ajouter des champs qui vous permettront de saisir du texte, on utilise la Classe
JTextField.
Exercice 5 [Champs Texte]
1. Declarez un objet labelTitre de type JLabel en passant en param`etre de son constructeur une chane de caract`eres que vous souhaitez afficher.
2. Ajoutez un champ titre de type JTextField dans Fenetre_Bibliotheque.
3. Dans la methode buildContentPane(), affectez le champ liste avec le constructeur sans
param`etres de JTextField. Ajoutez ce champ `a monPanel.
Enfin vient le moment o`
u nous allons agir sur des objets de type ListeDeDocuments. Nous
allons utiliser des Botes de dialogue pour fournir les derniers renseignements necessaires `
a
lajout dun document.
Une boite de dialogue est une fenetre qui apparat ponctuellement et dont le but est dobtenir une valeur dun type particulier. Par exemple on peut lancer une bote de dialogue pour
demander le nombre de pages dun dictionnaire ou le nom de lauteur dun livre. Pour faire
apparatre ces boites de dialogue, on appelle la methode JOptionPane.showInputDialog, qui
prendra ici pour premier param`etre null et second param`etre une chane de caract`eres que vous
voulez voir apparatre dans cette bote.
Enfin pour creer un bouton, il faut construire un tel objet avec le constructeur
JButton(AbstractAction e) et lajouter au panel. Dans lexercice qui suit nous allons construire
une classe etendant AbstractAction.
Exercice 6 [Action]
1. Definissez un champs mabiblio de type ListeDeDocuments dans Fenetre_Bibliotheque.
mabiblio contiendra la liste de documents sur laquelle nous allons travailler.
2. Modifiez le constructeur de Fenetre_Bibliotheque de mani`ere `a ce quil prenne une
ListeDeDocuments en param`etre, et initialise mabiblio avec ce param`etre
3. Definissez des accesseurs pour les champs titre, liste et mabiblio.
4. Creez une classe SoumettreAction etendant la classe AbstractAction (elle se trouve dans
le package javax.swing ) contenant un champ fenetre de type Fenetre_Bibliotheque
.
5. Declarez un constructeur pour SoumettreAction(Fenetre_Bibliotheque f,
String label_Bouton) qui initialise le champ fenetre de SoumettreAction avec f, et
appelle le constructeur de AbstractAction avec en param`etre label_Bouton.
6. Definissez une methode void actionPerformed(ActionEvent e) qui
teste si le champ liste de fenetre est egal `a "Dictionnaire" ou `a "Livre". Pour
obtenir ces lelement selctionne dans liste, on utilise getSelectedItem() sur ce champ,
lance les botes de dialogue pour demander les renseignements de type int (nombre de
pages, de tomes) ou de type String (nom de lauteur, ou langue),
cree le document en faisant appel aux constructeurs des classes Dictionnaires et
Livres,
3

ajoute ce document au champ mabiblio de fenetre. en faisant appelle aux methodes


de ListeDeDocuments.
7. Ajoutez un JBoutton construit avec une instance de SoumettreAction en param`etre.
Exercice 7 [Autre action] Ajoutez un dernier bouton `a votre fenetre qui vous permet dimprimer la liste des documents dans un terminal ou dans un fichier.

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