Java 6: Les Frames
1
Hua T-Tê
Cours 6 :
Interface graphique en Java - Les Frames
Préambule :
Ce cours ne contient que quelques brèves descriptions des composants graphiques Java. La
liste présentée est loin d’être exhaustive. Pour de plus amples renseignements concernant le
sujet, un lien intéressant qui peut vous être utile:
http://java.sun.com/docs/books/tutorial/uiswing/components/
Vous y trouverez de nombreux exemples. Bonne lecture !!
Tous les tests contenus dans ce dossier nécessitent le compilateur Java 1.5.
1. Les Packages AWT et SWING :
AWT (Abstract Window ToolKit) est un ensemble de classes Java qui permettent de faire des
interfaces graphiques, c'est-à-dire simuler des boutons, des menus, des icônes, … tous les
widgets systèmes. Ces classes sont déclarées dans le package java.awt.
Pour être portable (même au niveau de l’apparence), les classes SWING sont crées et sont
déclarées dans le package javax.swing.
Les swing sont représentés par un ensemble de containers et des composants de base.
Seules les frames sont présentées dans ce document.
2. Hiérarchie des containers et les composants de base :
Remarque :
Seules les classes ci-dessous marquées en « gras » sont présentées avec un exemple. La liste
des classes n’est pas exhaustive.
Une frame est une fenêtre qui contient (encapsule) des containers qui contiennent eux-mêmes
des composants.
2.1. Les containers sont répartis en 3 catégories :
a- containers de haut niveau
JApplet : définit une applet
JDialog : définit une fenêtre de dialogue qui peut être modale ou non
JFrame : définit une fenêtre de type application contenant des titres, des
boutons, des menus, …
JWindows : définit une fenêtre sans le cadre
b- containers génériques :
JPanel : c’est une classe destinée à contenir d’autres classes. On fait en
principe appel à la méthode setLayout(LayoutManager) pour gérer la manière
dont les composants sont placés.
JScrollPane : permettre d’ajouter un ascenseur à un textArea.
JTabbedPane : permettre de mettre plusieurs panels dans des onglets.
JToolbar : permettre de créer une barre de boutons (JButton)
JMenuBar : permettre de créer une barre de menus et de sous-menus
(items)
Java 6: Les Frames
2
Hua T-Tê
c- containers spécifiques
JInternalFrame : permettre d’afficher une fenêtre dans une JFrame
JLayeredPane : permet d’afficher des JPanels à différents niveaux.
JRootPane : structure de base des composants swing pouvant contenir des
menus.
2.2. Les composants sont répartis en 2 groupes :
a- composants non éditable : (pas d’évènement)
JProgessBar : affiche une barre de progession
JLabel : permet d’afficher un texte dans une zone d’étiquette. On peut y mettre
un texte en format HTML
JToolTip : affiche des indications sur un composant
b- composants éditables (génèrent un évènement)
JTextField : représente un champ de saisie d’un texte.
JTextArea : permet de travailler avec un texte sur plusieurs lignes
JButton : représente un bouton qui génère un événement sur un simple click
JComboxBox : permet de choisir qu’un seul élément dans une liste
JList : permet de choisir plusieurs éléments dans une liste
JPasswordField : permet de saisir un texte « crypté »
3. Les évènements :
Pour pouvoir gérer les évènements (capture d’un évènement), il faut implémenter l’interface
correspondant à l’évènement :
- ActionListener
- ChangeListener
- WindowsListener
Java 6: Les Frames
3
Hua T-Tê
Ces interfaces sont déclarées dans le package java.awt.event.
Par exemple pour être prévenu d’un évènement survenu à un des composants éditables, il faut
implémenter l’interface ActionListener à la classe qui récupère l’évènement pour le traiter :
class RecupEvenement implements java.awt.event.ActionListener
{ public void actionPerformed(java.awt.even.ActionEvent event)
{ ….. traiter l’évènement ici… }
}
Pour enregistrer un évènement, il faut associer au composant “éditable” du container de la
frame, une commande pour écouter les évènements (méthode addActionListener()).
4. Construction d’une frame :
Pour créer une frame, il suffit de créer une sous-classe de la classe JFrame comme par
exemple :
public class Exemp1Frame extends JFrame …
{ … ici construction de la frame … }
Le constructeur de cette frame va dessiner la fenêtre graphique qui va être affichée. Pour
cela, il faudra définir dans l’ordre les éléments (classe) suivants :
1 container niveau 1:
Container contain = getContentPane() ;
contain.setLayout(new GridLayout(2,3,10,10)) ;
getContentPane() crée le container
setLayout définit la forme du container : par exemple, le container
« contain » contient 2 containers de niveau 2 (un JPanel par exemple) de 3
lignes chacun. La dimension de chaque container niveau 2 est de 10*10 pixels
La classe Container est définie dans le package java.awt
2 Container de niveau 2: ils dérivent du container de niveau 1 comme par
exemple JPanel :
JPanel panel1= new JPanel() ;
Crée 1 panel qui sera ajouté au container de niveau 1 « contain » après qu’on
l’ait rempli de composants.
contain.add(panel1) ajoute le panel dans le container une fois que le panel
soit rempli de composants
3 les composants (éditables et non éditables) de bas niveau :
JLabel, JTextField, JTextfield, JButton, JComboBox, ....
On crée ces composants avec leur constructeur respectif ou les
transformer et leur donner une apparence spécifique avec leur méthode
respective.
4 puis on les ajoute au container de niveau 2 (JPanel dans l’exemple) par la
méthode add().
Java 6: Les Frames
4
Hua T-Tê
Soient jlabel un JLabel et jTextField un JTextfield : alors pour les ajouter dans
le container niveau 2 de nom panel1 (ci-dessus), on écrit
panel1.add(jlabel) ; panel1.add(jTextField)
puis ajouter le container de niveau 2 (panel1) au container de niveau 1
(contain):
contain.add(jpanel)
on dimensionne la frame par la méthode setSize() ou par pack()
this.setSize(50,100) dimensionne la frame sur 50 de longueur et 100
de largeur ou bien tout simplement, this.pack() pour redimensionner
automatiquement la frame.
si on veut, on peut centrer la frame au milieu de l’écran:
this.setLocationRelativeTo(null)
enfin, on rend la frame visible :
this.show() ; ou bien this.setVisible(true) ;
5 dans le cas des composants éditables qui peuvent générer un évènement, alors il
faut écouter l’évènement en l’interceptant par la méthode addActionListener()
sur le composant comme par exemple jTextField.addActionListener()
intercepte l’évènement crée par jTextField (en général après la saisie d’un
texte)