Interfaces graphiques Swing : Cours complet

Telechargé par android7java
1
Interfaces graphiques avec SWING
1. La classe JFrame
2. Gestion d'événements dans une fenêtre
3. Les contrôles
4. Les dessins
5. Les menus
6. Les événements souris
7. Evénements clavier
8. Les gestionnaires de mise en forme
9. Textes et graphiques
I) La classe JFrame
JFrame
Une fenêtre est un conteneur destiné à contenir d'autres composants.
Constructeurs
JFrame()
JFrame(String) : Création d'une instance en précisant le titre
La fenêtre créée n'est pas visible par défaut, pour la rendre visible il faut utiliser la méthode
setVisible(true).
Exemple
import javax.swing.*;
public class exemple1{
public static void main (String args[]){
JFrame fen=new JFrame();
fen.setSize(300,299);
fen.setTitle("premiere fenetre graphique ");
fen.setVisible(true);
}}
Création d'une classe fenêtre personnalisée
Dans l'exemple précédent on a utilisé un objet de type JFrame. Dans ce qui suit on va définir
une classe dérivée de JFrame et qui représentera la fenêtre.
Exemple
class fenetre1 extends JFrame{
public fenetre1(){
setSize(400,150);
setTitle("aaaaaaaaaaaaa");
setVisible(true);
}}
public class p1{
public static void main (String args[]){
2
fenetre1 fen=new fenetre1();
}}
Actions sur les caractéristiques d'une fenêtre
Changement de la taille de la fenêtre et de son titre.
Modification de la position de la fenêtre en utilisant la méthode setBounds(x, y, larg, haut);
Exemple
import javax.swing.*;
class fenetre extends JFrame{
public fenetre(){
setBounds(50,100,300,150);
setTitle("titre ");
}}
Caractéristique d'une fenêtre JFrame
Pour terminer l'exécution après fermeture de la fenêtre on appelle la méthode
setDefaultCloseOperation avec l'un des arguments suivants :
EXIT_ON_CLOSE
DO_NOTHING_ON_CLOSE
Hide_ON_CLOSE
DISPOSE_ON_CLOSE
pour positionner l'objet au centre : fen.setLocationRelativeTo(null);
la méthode setLocation(int x, int y) spécifie la position de la fenêtre sur l'écran.
Empêcher le redimensionnement de la fenêtre
Il suffit d'appeler la méthode setResizable(false);
Faire que la fenêtre soit toujours au premier plan : méthode setAlwaysOnTop(boolean b)
Il s'agit d'une méthode qui prend un booléen en paramètre. La valeur true met la fenêtre au
premier plan.
Méthode pack()
La méthode pack() permet d'attribuer une taille minimale à la fenêtre (juste assez pour voir
tous ses composants) : fenetre.pack();
Retirer les contours et les boutons de contrôles
Pour ce faire, il vous suffit d'utiliser la méthode setUndecorated(Boolean b).
II) Gestion des événements dans une fenêtre
Interface MouseListener
Tout événement possède une source, c'est l'objet qui lui a donné naissance (bouton,
fenêtre...).
Pour traiter un événement (click, ..), on associe à la source un objet écouteur (la fenêtre
par exemple) dont la classe implémente une interface correspondante à une catégorie
d'événements.
3
L'objet est alors un écouteur de cette catégorie d'événements.
Il existe alors une catégorie d'événements souris à traiter avec un écouteur souris (objet
d'une classe implémentant l'interface MouseListener).
L'interface MouseListener comporte cinq méthodes mouseClicked, mouseExited,
mousePressed, mouseReleased, mouseEntered.
Class ecouteursouris implements MouseListener{
Public void mouseClicked (MouseEvent ev)
{System.out.println("click dans la fenêtre"); }
}
Cette classe implémente l'interface MouseListener, elle doit donc redéfinir toutes ses
méthodes.
Pour traiter un événement clic, il faut ajouter un écouteur souris (objet) par la méthode
addMouseListener(objetecouteur).
Exemple : affichage d'un message à chaque clic dans la fenêtre.
import javax.swing.*;
import java.awt.event.*;
class mafenetre extends JFrame implements MouseListener{
public mafenetre() {
setBounds(50,100,300,150);
setvisible("true");
this.addMouseListener(this); //la fenêtre sera son propre écouteur d'événement souris
}
public void mouseClicked(MouseEvent ev){
int x=ev.getX();
int y=ev.getY();
System.out.println("click dans la fenetre au coordonnees "+ x +" et "+ y);
}
public void mousePressed(MouseEvent ev){}
public void mouseReleased(MouseEvent ev){}
public void mouseEntered(MouseEvent ev){}
public void mouseExited(MouseEvent ev){}
}
public class p3{
public static void main (String args[]){
mafenetre fen=new mafenetre();
}}
Notion d'adaptateur
MouseAdapter est une classe qui redéfinie les méthodes de l'interface MouseListener avec
des corps vides.
Cette classe permet de faciliter l'implémentation.
Exemple
import javax.swing.*;
import java.awt.event.*;
4
class mafenetre extends JFrame {
public mafenetre(){
setBounds(50,100,300,150);
setTitle("fentre graphique ");
addMouseListener(new ecouteursouris());
}}
class ecouteursouris extends MouseAdapter{
public void mouseClicked(MouseEvent ev){
System.out.println("click dans la fenetre ");
}}
public class P04{
public static void main (String args[]){
mafenetre fen=new mafenetre();
fen.setVisible(true);
}}
Affichage des infos associées à l'événement
int x=ev.getX();
int y=ev.getY();
System.out.println("click dans la fenetre au coordonnees "+ x +" et "+ y);
Puisque la classe ecouteursouris n'est pas instanciée dans le programme, on peut la sauter
en écrivant dans la classe mafenetre comme suit :
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent ev)
{int x=ev.getX();
int y=ev.getY();
System.out.println("click dans la fenetre au coordonnees "+ x +" et "+ y);
} });
Gestion des boutons
Ajout d'un bouton à la fenêtre
- On crée un bouton en instantiant la classe JButton.
b=new JButton("bouton1"); //création d'un bouton de titre bouton1.
b.setText("bouton1");
- Il faut ensuite l'ajouter à la fenêtre
La méthode getContentPane() de la classe JFrame fournit une référence, de type Container,
au contenu de la fenêtre.
Container c= getContentPane();
Pour ajouter un composant à ce contenu on utilise la méthode add() de la classe Container :
c.add(b);
ou en faisant un raccourci :
getContentPane().add(b);
5
Affichage du bouton : gestionnaire de mise en forme
Lorsque le bouton est affiché, il occupe toute la fenêtre. Pour résoudre ce problème on fait
recours à ce qu'on appelle gestionnaire de mise en forme (layout manager). Il existe plusieurs
classes représentant ces gestionnaires pour ajouter les composants.
Par défaut java utilise le gestionnaire BorderLayout qui, en l'absence d'information
supplémentaire, occupe toute la fenêtre.
class mafenetre extends JFrame{
private JButton b;
public mafenetre(){
setTitle("fenetre avec un seul bouton");
setSize(300,499);
b=new JButton("bouton1");
getContentPane().add(b);
//getContentPane().setLayout(new FlowLayout());
}
}
public class p5{
public static void main (String args[]){
mafenetre fen=new mafenetre();
fen.setVisible(true);
}}
FlowLayout permet de superposer les composants l'un à la suite de l'autre sur la fenêtre.
Pour appliquer un gestionnaire il faut utiliser la méthode setLayout() du contenu de la
fenêtre.
getContentPane().setLayout(new FlowLayout());
Classe Component (Quelques méthodes utiles)
La classe Component est une classe abstraite dérivée de la classe Object qui encapsule les
composants d'une interface graphique.
Les méthodes suivantes de la classe Component permettent de gérer l'aspect d'un
composant (en particulier une fenêtre).
Montrer et cacher un composant : void setVisible(boolean b)
Exemple : compo.setVisible(true) rend visible le composant compo
Activer et désactiver un composant : void setEnabled(boolean b)
Exemple : compo.setEnabled(true) active le composant compo
Connaître l’état (activé ou non) d’un composant : boolean isEnabled()
Exemple : compo.isEnabled() retourne true si le composant compo est activé
Modifier la couleur de fond d'un composant : void setBackground(Color c)
Modifier la couleur du premier plan d'un composant : void setForeground(Color c)
Modifier la taille d'un composant : void setSize(int largeur, int hauteur)
1 / 62 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!