SlideShare uma empresa Scribd logo
1 de 4
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é.

Mais conteúdo relacionado

Destaque

Destaque (20)

Nevera Smeg SBS8004PO
Nevera Smeg SBS8004PONevera Smeg SBS8004PO
Nevera Smeg SBS8004PO
 
Nevera Smeg FA63XBI
Nevera Smeg FA63XBINevera Smeg FA63XBI
Nevera Smeg FA63XBI
 
Lavadora BOSCH WAW28570EE
Lavadora BOSCH WAW28570EELavadora BOSCH WAW28570EE
Lavadora BOSCH WAW28570EE
 
Campana Teka CNL1 3000
Campana Teka CNL1 3000 Campana Teka CNL1 3000
Campana Teka CNL1 3000
 
Encimera Teka IR 831
Encimera Teka IR 831Encimera Teka IR 831
Encimera Teka IR 831
 
CEFQ - Les médias sociaux : le temps de s'y mettre
CEFQ - Les médias sociaux : le temps de s'y mettreCEFQ - Les médias sociaux : le temps de s'y mettre
CEFQ - Les médias sociaux : le temps de s'y mettre
 
Horno BOSCH HBG6763S1
Horno BOSCH HBG6763S1Horno BOSCH HBG6763S1
Horno BOSCH HBG6763S1
 
Horno Smeg SFT105B
Horno Smeg SFT105BHorno Smeg SFT105B
Horno Smeg SFT105B
 
Encimera Smeg SEI563B
Encimera Smeg SEI563BEncimera Smeg SEI563B
Encimera Smeg SEI563B
 
Lavavajillas BOSCH SMS51E28EU
Lavavajillas BOSCH SMS51E28EULavavajillas BOSCH SMS51E28EU
Lavavajillas BOSCH SMS51E28EU
 
Commande rapide linux
Commande rapide linuxCommande rapide linux
Commande rapide linux
 
ATELIER - Extrait - CARRIERE DE FEMME - par Isabelle Deprez pour HEC au fémi...
ATELIER - Extrait - CARRIERE DE FEMME - par Isabelle Deprez  pour HEC au fémi...ATELIER - Extrait - CARRIERE DE FEMME - par Isabelle Deprez  pour HEC au fémi...
ATELIER - Extrait - CARRIERE DE FEMME - par Isabelle Deprez pour HEC au fémi...
 
Nevera Smeg FAB30RNE1
Nevera  Smeg FAB30RNE1Nevera  Smeg FAB30RNE1
Nevera Smeg FAB30RNE1
 
Nevera BOSCH KDV33VW32
 Nevera BOSCH KDV33VW32 Nevera BOSCH KDV33VW32
Nevera BOSCH KDV33VW32
 
Les aides Bpifrance : des dispositifs à chaque étape de vos projets
Les aides Bpifrance : des dispositifs à chaque étape de vos projetsLes aides Bpifrance : des dispositifs à chaque étape de vos projets
Les aides Bpifrance : des dispositifs à chaque étape de vos projets
 
Campana Smeg KC19POE
Campana Smeg KC19POECampana Smeg KC19POE
Campana Smeg KC19POE
 
Nevera Smeg FT41BXE
Nevera Smeg FT41BXENevera Smeg FT41BXE
Nevera Smeg FT41BXE
 
Simulateur
SimulateurSimulateur
Simulateur
 
Campana Smeg KSEG7XE
Campana Smeg KSEG7XECampana Smeg KSEG7XE
Campana Smeg KSEG7XE
 
Les Tombes phéniciennes de Tanger
Les Tombes phéniciennes de TangerLes Tombes phéniciennes de Tanger
Les Tombes phéniciennes de Tanger
 

Semelhante a Tutorial java swing

Debutermatlab
DebutermatlabDebutermatlab
Debutermatlab
nejmzad
 
Golbal mapper et la 3 d
Golbal mapper et la 3 dGolbal mapper et la 3 d
Golbal mapper et la 3 d
sami horchani
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
Ruau Mickael
 

Semelhante a Tutorial java swing (18)

Programmation graphique avancée en java
Programmation graphique avancée en javaProgrammation graphique avancée en java
Programmation graphique avancée en java
 
Traitement d'image sous Matlab
Traitement d'image sous Matlab  Traitement d'image sous Matlab
Traitement d'image sous Matlab
 
Composants base
Composants base Composants base
Composants base
 
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FRXNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
 
Java- LT informatique
Java-  LT informatiqueJava-  LT informatique
Java- LT informatique
 
Debutermatlab
DebutermatlabDebutermatlab
Debutermatlab
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de java
 
Swing
SwingSwing
Swing
 
Chapitre 9 Conception d’interface graphique.pdf
Chapitre 9 Conception d’interface graphique.pdfChapitre 9 Conception d’interface graphique.pdf
Chapitre 9 Conception d’interface graphique.pdf
 
Calculatrice scientifique en JAVA(AWT)
Calculatrice scientifique en JAVA(AWT)Calculatrice scientifique en JAVA(AWT)
Calculatrice scientifique en JAVA(AWT)
 
Golbal mapper et la 3 d
Golbal mapper et la 3 dGolbal mapper et la 3 d
Golbal mapper et la 3 d
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
 
Tutoriel photofiltre par F. BELLET
Tutoriel photofiltre par F. BELLETTutoriel photofiltre par F. BELLET
Tutoriel photofiltre par F. BELLET
 
00 swing
00 swing00 swing
00 swing
 
Eclipse
EclipseEclipse
Eclipse
 
2-android.pdf
2-android.pdf2-android.pdf
2-android.pdf
 
utilisation de MATLAB dans l'asservissement.pdf
utilisation de MATLAB dans l'asservissement.pdfutilisation de MATLAB dans l'asservissement.pdf
utilisation de MATLAB dans l'asservissement.pdf
 
Tp plaque
Tp plaqueTp plaque
Tp plaque
 

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é.