SlideShare une entreprise Scribd logo
Tutoriel Java-Swing numéro 1
Graphismes en Java
Pré-requis : classe dérivée ; méthode main
Rechercher dans la documentation de Sun:
->Classes de composants graphiques conteneurs : JApplet,JFrame,JPanel
->La classe Graphics pour le dessin et la classe Color
->Pour les composants graphiques élémentaires :
JButton,JEdit,JLabel,JTextArea,JComboBox, JMenu,JMenuItem
1)Fenêtrage,la classe JFrame
Pour afficher une fenêtre, on peut employer la classe JFrame et redéfinir sa méthode
paint(Graphics g) :
Class Fenetre extends JFrame
{public void paint(Graphics g)
{g.drawString(20,20, « Bonjour ! ») ; //Ecrit un message
g.setColor(new Color(234,234,134)) ; //Couleur de remplissage :rouge,vert,bleu
g.fillRect(35,35,64,64) ; //dessine un rectangle plein
}
}
Dans votre main, écrivez :
JFrame jf=new Fenetre() ;
Jf.setSize(200,200) ;
Jf.setVisible(true) ; //Ne pas oublier ces deux instructions sinon rien ne s’affiche !
Les classes les plus usitées employant la méthode paint sont JFrame et JApplet ;
Toutefois, en général, on ne se contente pas de dessiner dans une fenêtre, la fenêtre doit
souvent contenir d’autres composants graphiques tels des panneaux , des boutons ;
2)Composants contenus dans d’autres
Intéressons-nous aux panneaux qui sont des conteneurs de composants. Les contenus peuvent
être élémentaires(JButton,etc) ou bien ils peuvent être eux-mêmes d’autres panneaux.
Un panneau désigne la classe JPanel et toute dérivation ; un JPanel est en principe intégré à
un conteneur ‘Fenêtre’ tel qu’un JFrame ou bien un autre panneau .
Trois cas d’utilisation peuvent se présenter :
->Si vous ne dessinez rien dans un panneau, il est un simple conteneur d’autres composants,
vous n’avez pas à redéfinir paint() ni paintComponent()
->Si votre panneau ne comprends que des instructions de dessin, redéfinissez paint ou
paintComponent qui sont équivalentes.
->Si votre panneau est un conteneur et que vous dessinez dedans, redéfinissez
paintComponent
Pour afficher ‘proprement’ un panneau de la classe JPanel, on redéfinit sa méthode :
paintComponent(Graphics g)
{super.paintComponent(g) ; <Instructions de dessins> ;}
paintComponent redessine tout le composant selon vos instructions et réaffiche en même
temps les composants qui lui sont contenus.
Il ne faut pas oublier l’appel à super, qui appelle la méthode mère de la classe mère(même
nom,mêmes paramètres) , sinon on a fréquemment des bugs d’affichage (J’en ai fait l’amère
expérience)
La méthode add :
On incorpore dans un panneau d’autres panneaux ou composants avec la méthode add :
Class MonPanneau extends JPanel
{public MonPanneau()
{add new JButton(« Hello ! ») ; }
}
public static void main(String[] args)
{JFrame jf=new JFrame() ;
jf.add(new MonPanneau() );
jf.setSize(200,200) ;
jf.setVisible(true) ;}
A noter qu’on ne redéfinira pas la méthode paintComponent d’un simple conteneur de
boutons .
Pour ajouter le panneau à notre fenêtre, nous pouvons également faire :
Jf.setContentPane(new MonPanneau()) ; qui nous signale qu’une fenêtre dispose toujours en
fait d’un panneau, accessible par la méthode getContentPane()
3)La méthode repaint()
Pour tout composant graphique,cette méthode appelle explicitement paintComponent()
Et tout le composant est réaffiché.
Il faut savoir que repaint peut être appelée implicitement, par exemple quand vous bougez la
fenêtre ou que vous la redimensionnez, ou qu’une fenêtre au-dessus est retirée.
Appelez repaint() (sans arguments !) quand votre graphique a été modifié . Attention
toutefois : si 2 ordres repaint sont très rapprochés, souvent un seul est pris en compte. Je pense
que la machine Java, une fois transmis l’ordre repaint, prépare cette action mais qu’elle est en
quelque sorte désynchronisée du reste du programme. Du coup, 2 repaint rapprochés sont
simplifiés en un seul ! Voici ce qui m’est arrivé quand j’appelai repaint () après tout
mouvement de pièce pour mon jeu d’échecs : Je jouais un coup ; l’ordinateur le sien, et
seulement à ce moment-là le repaint était effectué !
L’explication tient dans le fait que repaint est une méthode lourde et doit être employée avec
circonspection. Afin de procéder avec plus de légèreté, employez le ‘dessin en direct’ dans un
composant graphique :
Graphics g=getGraphics() ;
<Instructions graphiques employant g>
g.dispose() ; //Libère les ressources graphiques liées à g.
De cette manière, votre graphique n’est pas redessiné entièrement.
En cas de réaffichage, notez que des instructions ‘en direct’ disparaissent, à moins que
paintComponent() ne fasse rien.
4)Les Gestionnaires de positionnement de contenu
La méthode add, employable pour nos panneaux aussi bien que pour notre fenêtre,
ajoutera le composant en paramètre dans son conteneur un peu n’importe comment par
défaut(De gauche à droite,de haut en bas) : maFenetre.add(new MonPanneau())
On dit qu’on a le gestionnaire FlowLayout par défaut.
Pour modifier cela, d’autres gestionnaires existent :
BorderLayout
Les composants sont ajoutés au nord,au sud, au centre , etc… du conteneur.
Exemple : dans la méthode main : observer la méthode <conteneur>.setLayout(…)
Jf.setLayout(new BorderLayout()) ;
Jf.add(new MonPanneau(),BorderLayout.North) ;
Jf.add(new JButton(« okay »),BorderLayout.East) ;
Sans le deuxième paramètre, le contenu est ajouté au centre.
Attention, Si vous ajoutez deux composants au même endroit, un seul sera visible !Le
deuxième sera ignoré sans aucun message !
Si vous mettez beaucoup de composants, subdivisez-les car le panneau géré par BorderLayout
ne peut lui-même n’en contenir que 5.
Si vous dessinez dans votre panneau, je vous conseille de placer les composants contenus à
l’est et au sud , pour vous réserver le cadran ‘en haut,à gauche’ pour votre dessin. En effet,si
vous mettez un composant au nord,par exemple, vous devrez faire des calculs pour éviter de
dessiner au-dessus ; s’il est au sud, au pire, s’il cache le bas de votre dessin, un
redimensionnement adéquat de votre fenêtre rendra votre dessin visible.
En définitive,le plus simple est de faire des panneau conteneurs et d’autres des surfaces à
dessiner : on évite la cohabitation dessin/composants contenus.
Pour afficher une barre de boutons, on préfèrera…
Le gestionnaire GridLayout
Ce gestionnaire affiche les composants dans une grille rectangulaire , tous les composants
occupent le même espace.
Jf.setLayout(new GridLayout(5,3)) ;
Notre contenu sera disposé dans 5 lignes et 3 colonnes ;
A noter qu’on ne peut pas choisir l’emplacement d’un composant qu’on ajoute.
D’un point de vue ergonomique, observons que le composant Table du html s’en sort bien
mieux et permet plus de souplesse! Comme régler la largeur des colonnes, par exemple.
Un dernier gestionnaire existe, GridBagLayout, mais il est réputé pour être très compliqué.

Contenu connexe

PDF
TP1 Traitement d'images Génie Logiciel avec Matlab
ODP
Uml: Diagrammes de classes -- Concepts avances --- 27
PPTX
Application Java swing : Gestion des réunion
PDF
Lavavajillas Smeg LSA4513X
KEY
Exposé version finale
PDF
Congelador Smeg CVB20
PDF
Fievre aigue
TP1 Traitement d'images Génie Logiciel avec Matlab
Uml: Diagrammes de classes -- Concepts avances --- 27
Application Java swing : Gestion des réunion
Lavavajillas Smeg LSA4513X
Exposé version finale
Congelador Smeg CVB20
Fievre aigue

En vedette (20)

PDF
Nevera Smeg SBS8004PO
PDF
Nevera Smeg FA63XBI
PDF
Lavadora BOSCH WAW28570EE
PDF
Campana Teka CNL1 3000
PDF
Encimera Teka IR 831
PPTX
CEFQ - Les médias sociaux : le temps de s'y mettre
PDF
Horno BOSCH HBG6763S1
PDF
Horno Smeg SFT105B
PDF
Encimera Smeg SEI563B
PDF
Lavavajillas BOSCH SMS51E28EU
PDF
Commande rapide linux
PDF
ATELIER - Extrait - CARRIERE DE FEMME - par Isabelle Deprez pour HEC au fémi...
PDF
Nevera Smeg FAB30RNE1
PDF
Nevera BOSCH KDV33VW32
PDF
Les aides Bpifrance : des dispositifs à chaque étape de vos projets
PDF
Campana Smeg KC19POE
PDF
Nevera Smeg FT41BXE
PPTX
Simulateur
PDF
Campana Smeg KSEG7XE
DOCX
Les Tombes phéniciennes de Tanger
Nevera Smeg SBS8004PO
Nevera Smeg FA63XBI
Lavadora BOSCH WAW28570EE
Campana Teka CNL1 3000
Encimera Teka IR 831
CEFQ - Les médias sociaux : le temps de s'y mettre
Horno BOSCH HBG6763S1
Horno Smeg SFT105B
Encimera Smeg SEI563B
Lavavajillas BOSCH SMS51E28EU
Commande rapide linux
ATELIER - Extrait - CARRIERE DE FEMME - par Isabelle Deprez pour HEC au fémi...
Nevera Smeg FAB30RNE1
Nevera BOSCH KDV33VW32
Les aides Bpifrance : des dispositifs à chaque étape de vos projets
Campana Smeg KC19POE
Nevera Smeg FT41BXE
Simulateur
Campana Smeg KSEG7XE
Les Tombes phéniciennes de Tanger
Publicité

Similaire à Tutorial java swing (17)

PDF
Java- LT informatique
PDF
PPT
Chapitre4 cours de java
PDF
Cours java-swingpdf
PDF
00 swing
PDF
Calculatrice scientifique en JAVA(AWT)
PDF
Les composants de Swing
PDF
Chapitre 9 Conception d’interface graphique.pdf
PDF
PDF
Android-Ch3-2024Android-Ch3-20242025.pdf
PDF
Chap10
PPT
4-2-java swing.ppt
PDF
Programmation graphique avancée en java
PDF
Composants base
PDF
Java Graphisme
PDF
PDF
Chapitre4_8584d4594736c2d6adfa50f377fa6c4f.pdf
Java- LT informatique
Chapitre4 cours de java
Cours java-swingpdf
00 swing
Calculatrice scientifique en JAVA(AWT)
Les composants de Swing
Chapitre 9 Conception d’interface graphique.pdf
Android-Ch3-2024Android-Ch3-20242025.pdf
Chap10
4-2-java swing.ppt
Programmation graphique avancée en java
Composants base
Java Graphisme
Chapitre4_8584d4594736c2d6adfa50f377fa6c4f.pdf
Publicité

Tutorial java swing

  • 1. Tutoriel Java-Swing numéro 1 Graphismes en Java Pré-requis : classe dérivée ; méthode main Rechercher dans la documentation de Sun: ->Classes de composants graphiques conteneurs : JApplet,JFrame,JPanel ->La classe Graphics pour le dessin et la classe Color ->Pour les composants graphiques élémentaires : JButton,JEdit,JLabel,JTextArea,JComboBox, JMenu,JMenuItem 1)Fenêtrage,la classe JFrame Pour afficher une fenêtre, on peut employer la classe JFrame et redéfinir sa méthode paint(Graphics g) : Class Fenetre extends JFrame {public void paint(Graphics g) {g.drawString(20,20, « Bonjour ! ») ; //Ecrit un message g.setColor(new Color(234,234,134)) ; //Couleur de remplissage :rouge,vert,bleu g.fillRect(35,35,64,64) ; //dessine un rectangle plein } } Dans votre main, écrivez : JFrame jf=new Fenetre() ; Jf.setSize(200,200) ; Jf.setVisible(true) ; //Ne pas oublier ces deux instructions sinon rien ne s’affiche ! Les classes les plus usitées employant la méthode paint sont JFrame et JApplet ; Toutefois, en général, on ne se contente pas de dessiner dans une fenêtre, la fenêtre doit souvent contenir d’autres composants graphiques tels des panneaux , des boutons ; 2)Composants contenus dans d’autres Intéressons-nous aux panneaux qui sont des conteneurs de composants. Les contenus peuvent être élémentaires(JButton,etc) ou bien ils peuvent être eux-mêmes d’autres panneaux. Un panneau désigne la classe JPanel et toute dérivation ; un JPanel est en principe intégré à un conteneur ‘Fenêtre’ tel qu’un JFrame ou bien un autre panneau . Trois cas d’utilisation peuvent se présenter : ->Si vous ne dessinez rien dans un panneau, il est un simple conteneur d’autres composants, vous n’avez pas à redéfinir paint() ni paintComponent() ->Si votre panneau ne comprends que des instructions de dessin, redéfinissez paint ou paintComponent qui sont équivalentes. ->Si votre panneau est un conteneur et que vous dessinez dedans, redéfinissez paintComponent Pour afficher ‘proprement’ un panneau de la classe JPanel, on redéfinit sa méthode : paintComponent(Graphics g) {super.paintComponent(g) ; <Instructions de dessins> ;}
  • 2. paintComponent redessine tout le composant selon vos instructions et réaffiche en même temps les composants qui lui sont contenus. Il ne faut pas oublier l’appel à super, qui appelle la méthode mère de la classe mère(même nom,mêmes paramètres) , sinon on a fréquemment des bugs d’affichage (J’en ai fait l’amère expérience) La méthode add : On incorpore dans un panneau d’autres panneaux ou composants avec la méthode add : Class MonPanneau extends JPanel {public MonPanneau() {add new JButton(« Hello ! ») ; } } public static void main(String[] args) {JFrame jf=new JFrame() ; jf.add(new MonPanneau() ); jf.setSize(200,200) ; jf.setVisible(true) ;} A noter qu’on ne redéfinira pas la méthode paintComponent d’un simple conteneur de boutons . Pour ajouter le panneau à notre fenêtre, nous pouvons également faire : Jf.setContentPane(new MonPanneau()) ; qui nous signale qu’une fenêtre dispose toujours en fait d’un panneau, accessible par la méthode getContentPane() 3)La méthode repaint() Pour tout composant graphique,cette méthode appelle explicitement paintComponent() Et tout le composant est réaffiché. Il faut savoir que repaint peut être appelée implicitement, par exemple quand vous bougez la fenêtre ou que vous la redimensionnez, ou qu’une fenêtre au-dessus est retirée. Appelez repaint() (sans arguments !) quand votre graphique a été modifié . Attention toutefois : si 2 ordres repaint sont très rapprochés, souvent un seul est pris en compte. Je pense que la machine Java, une fois transmis l’ordre repaint, prépare cette action mais qu’elle est en quelque sorte désynchronisée du reste du programme. Du coup, 2 repaint rapprochés sont simplifiés en un seul ! Voici ce qui m’est arrivé quand j’appelai repaint () après tout mouvement de pièce pour mon jeu d’échecs : Je jouais un coup ; l’ordinateur le sien, et seulement à ce moment-là le repaint était effectué ! L’explication tient dans le fait que repaint est une méthode lourde et doit être employée avec circonspection. Afin de procéder avec plus de légèreté, employez le ‘dessin en direct’ dans un composant graphique : Graphics g=getGraphics() ; <Instructions graphiques employant g> g.dispose() ; //Libère les ressources graphiques liées à g. De cette manière, votre graphique n’est pas redessiné entièrement.
  • 3. En cas de réaffichage, notez que des instructions ‘en direct’ disparaissent, à moins que paintComponent() ne fasse rien. 4)Les Gestionnaires de positionnement de contenu La méthode add, employable pour nos panneaux aussi bien que pour notre fenêtre, ajoutera le composant en paramètre dans son conteneur un peu n’importe comment par défaut(De gauche à droite,de haut en bas) : maFenetre.add(new MonPanneau()) On dit qu’on a le gestionnaire FlowLayout par défaut. Pour modifier cela, d’autres gestionnaires existent : BorderLayout Les composants sont ajoutés au nord,au sud, au centre , etc… du conteneur. Exemple : dans la méthode main : observer la méthode <conteneur>.setLayout(…) Jf.setLayout(new BorderLayout()) ; Jf.add(new MonPanneau(),BorderLayout.North) ; Jf.add(new JButton(« okay »),BorderLayout.East) ; Sans le deuxième paramètre, le contenu est ajouté au centre. Attention, Si vous ajoutez deux composants au même endroit, un seul sera visible !Le deuxième sera ignoré sans aucun message ! Si vous mettez beaucoup de composants, subdivisez-les car le panneau géré par BorderLayout ne peut lui-même n’en contenir que 5. Si vous dessinez dans votre panneau, je vous conseille de placer les composants contenus à l’est et au sud , pour vous réserver le cadran ‘en haut,à gauche’ pour votre dessin. En effet,si vous mettez un composant au nord,par exemple, vous devrez faire des calculs pour éviter de dessiner au-dessus ; s’il est au sud, au pire, s’il cache le bas de votre dessin, un redimensionnement adéquat de votre fenêtre rendra votre dessin visible. En définitive,le plus simple est de faire des panneau conteneurs et d’autres des surfaces à dessiner : on évite la cohabitation dessin/composants contenus. Pour afficher une barre de boutons, on préfèrera… Le gestionnaire GridLayout Ce gestionnaire affiche les composants dans une grille rectangulaire , tous les composants occupent le même espace. Jf.setLayout(new GridLayout(5,3)) ; Notre contenu sera disposé dans 5 lignes et 3 colonnes ; A noter qu’on ne peut pas choisir l’emplacement d’un composant qu’on ajoute. D’un point de vue ergonomique, observons que le composant Table du html s’en sort bien mieux et permet plus de souplesse! Comme régler la largeur des colonnes, par exemple.
  • 4. Un dernier gestionnaire existe, GridBagLayout, mais il est réputé pour être très compliqué.