• Aucun résultat trouvé

Les interfaces graphiques

N/A
N/A
Protected

Academic year: 2022

Partager "Les interfaces graphiques"

Copied!
4
0
0

Texte intégral

(1)

TS - sp´e ISN

Les interfaces graphiques

TP 11

1 Le projet

balle qui tombe

Ce projet est constitu´e de trois classes :

– la classe Main dans laquelle on cr´e´e la fenˆetre, on dessine, on r´eagit aux ´ev´enements ;

– la classe PanneauDessin qui est une extension de la classe JPanel et qui permet de cr´eer le panneau o`u sera dessin´e la balle ;

– la classe PanneauBoutons idem pour le panneau des boutons.

Voici les codes :

i m p o r t j a v a.awt.B o r d e r L a y o u t;

i m p o r t j a v a.awt.e v e n t.A c t i o n E v e n t; i m p o r t j a v a x.s w i n g.J F r a m e;

p u b l i c c l a s s M a i n {

s t a t i c J F r a m e f e n e t r e = new J F r a m e() ;

s t a t i c P a n n e a u B o u t o n s p a n n e a u B = new P a n n e a u B o u t o n s() ; s t a t i c P a n n e a u D e s s i n p a n n e a u D = new P a n n e a u D e s s i n() ; s t a t i c b o o l e a n aff = f a l s e;// aff : on a f f i c h e le d e s s i n

p u b l i c s t a t i c v o i d m a i n(S t r i n g[] a r g s) {

d e s s i n e(f e n e t r e) ;// on l a n c e le p r o g r a m m e en a f f i c h a n t la f e n ^e t r e

}

p u b l i c s t a t i c v o i d d e s s i n e(J F r a m e f e n e t r e) {// p r e m i e r d e s s i n de la f e n ^e t r e

f e n e t r e.s e t V i s i b l e(f a l s e) ;

f e n e t r e.s e t T i t l e(” La b a l l e q u i tombe ”) ; f e n e t r e.s e t S i z e(400 , 3 0 0 ) ;

f e n e t r e.s e t L o c a t i o n R e l a t i v e T o(n u l l) ;

f e n e t r e.s e t D e f a u l t C l o s e O p e r a t i o n(J F r a m e.E X I T _ O N _ C L O S E) ;

f e n e t r e.s e t L a y o u t(new B o r d e r L a y o u t() ) ;// C r ´e a t i o n du L a y o u t de la f e n ^e t r e

if (aff) f e n e t r e.add(p a n n e a u D, B o r d e r L a y o u t.C E N T E R) ;// P o u r s a v o i r si on a f f i c h e le d e s s i n

f e n e t r e.add(p a n n e a u B, B o r d e r L a y o u t.W E S T) ;// on a f f i c h e le p a n n e a u de b o u t o n s

f e n e t r e.s e t V i s i b l e(t r u e) ; }

p u b l i c s t a t i c v o i d go() {// m ´e t h o d e a p p e l ´e e p o u r a u g m e n t e r l ’ o r d o n n ´e e de la b a l l e

int y = p a n n e a u D.g e t P o s Y() ;// v o i r c l a s s e P a n n e a u D e s s i n if (y < 1 5 0 ) {y=y+ 1 ; }// on v ´e r i f i e que la b a l l e n ’ est pas

a r r i v ´e e

e l s e {S y s t e m.out.p r i n t l n(”ARRIV´EE ! ! ! ! ! ! ”) ;}

p a n n e a u D.s e t P o s Y(y) ;// v o i r c l a s s e P a n n e a u D e s s i n f e n e t r e.r e p a i n t() ;// a c t u a l i s a t i o n de l ’ a f f i c h a g e

E.Gillon - T. Rey´ Page 1 2 f´evrier 2013

(2)

TS - sp´e ISN

Les interfaces graphiques

TP 11

}

p u b l i c s t a t i c v o i d a f f i c h a g e() {

// A p p e l ´e e au c l i c sur " A f f i c h e r "

f e n e t r e.add(p a n n e a u D, B o r d e r L a y o u t.C E N T E R) ; f e n e t r e.r e p a i n t() ;

f e n e t r e.v a l i d a t e() ;// a c t u a l i s e r l ’ a f f i c h a g e }

p u b l i c s t a t i c v o i d a c t i o n(A c t i o n E v e n t evt) {

// On d e m a n d e q u e l est l ’ ´e v ´e n e m e n t d ´e c l e n c h e u r : O b j e c t r e s u l t a t E v t = evt.g e t S o u r c e() ;

if (r e s u l t a t E v t == p a n n e a u B.b t n A f f i c h e r) { S y s t e m.out.p r i n t l n(”On a f f i c h e ”) ;

aff=t r u e; a f f i c h a g e() ; }

e l s e if (r e s u l t a t E v t == p a n n e a u B.b t n D e m a r r e r) { if (aff) {

p a n n e a u B.t e m p o.s t a r t() ;// On d ´e c l a n c h e le t i m e r du p a n n e a u D

S y s t e m.out.p r i n t l n(”On d´e m a r r e ”) ; }

e l s e {

S y s t e m.out.p r i n t l n(” Commence p a r a f f i c h e r ! ”) ;//

m e s s a g e d ’ e r r e u r }

}

e l s e if (r e s u l t a t E v t == p a n n e a u B.b t n A r r e t e r) { S y s t e m.out.p r i n t l n(”On a r r ˆe t e ”) ;

p a n n e a u B.t e m p o.s t o p() ;// on a r r ^e t e le t i m e r }

e l s e if (r e s u l t a t E v t == p a n n e a u B.b t n Q u i t t e r) { S y s t e m.out.p r i n t l n(” Bye b y e . . . ”) ;

S y s t e m.e x i t(0) ; }

e l s e if (r e s u l t a t E v t == p a n n e a u B.t e m p o) { go() ;

} } }

i m p o r t j a v a.awt.G r a p h i c s; i m p o r t j a v a x.s w i n g.J P a n e l;

p u b l i c c l a s s P a n n e a u D e s s i n e x t e n d s J P a n e l { p r i v a t e int p o s X = 1 0 0 ;

p r i v a t e int p o s Y = 20;

E.Gillon - T. Rey´ Page 2 2 f´evrier 2013

(3)

TS - sp´e ISN

Les interfaces graphiques

TP 11

p r i v a t e s t a t i c f i n a l l o n g s e r i a l V e r s i o n U I D = 1L;

p u b l i c v o i d p a i n t C o m p o n e n t(G r a p h i c s g) { g.f i l l O v a l(posX, posY, 80 , 80) ;

}

p u b l i c int g e t P o s X() {// p o u r o b t e n i r la p o s i t i o n en x de la b a l l e d e p u i s une a u t r e c l a s s e

r e t u r n p o s X; }

p u b l i c v o i d s e t P o s X(int p o s X) {// i d e m p o u r m o d i f i e r la p o s i t i o n en x

t h i s.p o s X = p o s X; }

p u b l i c int g e t P o s Y() {// i d e m p o u r les y r e t u r n p o s Y;

}

p u b l i c v o i d s e t P o s Y(int p o s Y) { t h i s.p o s Y = p o s Y;

} }

i m p o r t j a v a.awt.C o l o r;

i m p o r t j a v a.awt.e v e n t.A c t i o n E v e n t; i m p o r t j a v a.awt.e v e n t.A c t i o n L i s t e n e r; i m p o r t j a v a x.s w i n g.B o x L a y o u t;

i m p o r t j a v a x.s w i n g.J B u t t o n; i m p o r t j a v a x.s w i n g.J P a n e l;

i m p o r t j a v a x.s w i n g.*;// P o u r le T i m e r

// A t t e n t i o n T i m e r est un o b j e t d i s p o d a n s p l u s i e u r s b i b l i o t h `e q u e s // ils n ’ ont pas t o u s les m ^e m e s p r o p et m ´e t h o d e s .

p u b l i c c l a s s P a n n e a u B o u t o n s e x t e n d s J P a n e l i m p l e m e n t s A c t i o n L i s t e n e r { T i m e r t e m p o;// L ’ o b j e t qui t e m p o r i s e la c h u t e de la b a l l e

J B u t t o n b t n A f f i c h e r = new J B u t t o n(” A f f i c h e r ”) ;// C ’ est c l a i r non ? J B u t t o n b t n D e m a r r e r = new J B u t t o n(” D´e m a r r e r ”) ;

J B u t t o n b t n A r r e t e r = new J B u t t o n(” A r r ˆe t e r ”) ; J B u t t o n b t n Q u i t t e r = new J B u t t o n(” Q u i t t e r ”) ;

p r i v a t e s t a t i c f i n a l l o n g s e r i a l V e r s i o n U I D = 1L; p u b l i c P a n n e a u B o u t o n s() {

t e m p o = new T i m e r(50 , t h i s) ;// le t i m e r se d ´e c l e n c h e t o u t e s les 50 ms

t h i s.s e t L a y o u t(new B o x L a y o u t(this, B o x L a y o u t.P A G E _ A X I S) ) ;// L ’ o r g a n i s a t i o n du p a n n e a u est r ´e g i e par un n o u v e a u L a y o u t t h i s.s e t B a c k g r o u n d(C o l o r.O R A N G E) ;

t h i s.add(b t n A f f i c h e r) ;// on a j o u t e le b o u t o n au p a n n e a u b t n A f f i c h e r.a d d A c t i o n L i s t e n e r(t h i s) ;// on lui a p p l i q u e un

A c t i o n L i s t e n e r p o u r l ’ ´e c o u t e r

E.Gillon - T. Rey´ Page 3 2 f´evrier 2013

(4)

TS - sp´e ISN

Les interfaces graphiques

TP 11

t h i s.add(b t n D e m a r r e r) ;

b t n D e m a r r e r.a d d A c t i o n L i s t e n e r(t h i s) ; t h i s.add(b t n A r r e t e r) ;

b t n A r r e t e r.a d d A c t i o n L i s t e n e r(t h i s) ; t h i s.add(b t n Q u i t t e r) ;

b t n Q u i t t e r.a d d A c t i o n L i s t e n e r(t h i s) ; }

@ O v e r r i d e// O b l i g a t o i r e je ne s a i s p l u s p o u r q u o i ...

p u b l i c v o i d a c t i o n P e r f o r m e d(A c t i o n E v e n t evt) { // T O D O Auto - g e n e r a t e d m e t h o d s t u b

// D`es qu ’ un ´e v e n e m e n t s u r g i t ( c l i c ou t i m e r ) on l a n c e la m ´e t h o d e ci - d e s s o u s

M a i n.a c t i o n(evt) ; }

}

Tous ces listings sont disponibles sur le forum.

2 Modifications ` a apporter

Quelques id´ees de modifications `a apporter :

1. Ajouter un titre `a la fenˆetre au Nord du BorderLayout. 2. Faire tomber la balle plus vite.

3. Ajouter un boutonacc´elererqui multiplie la vitesse de la balle par 2 `a chaque appui.

4. Ajouter un deuxi`eme panneau de type PanneauDessin dans la fenˆetre, `a la position Est duBorderLayout.

5. Ajouter un texte explicatif au Sud duBorderLayout.

6. Ajouter les textes qui s’inscrivent dans la console au Sud duBorderLayout. 7. Donner `a la balle une vitesse de chute r´ealiste (souvenir de Physique : x= 12gt2).

8. Faire rebondir la balle sur le sol et au plafond (consid´erer dans un premier temps qu’il nni frottement, ni amortissement).

9. Autres id´ees bienvenues. . .

E.Gillon - T. Rey´ Page 4 2 f´evrier 2013

Références

Documents relatifs

• intrinsèque: plusieurs façons de lancer la même commande (Actions en java, commande Ejecter des anciens Macintosh).. • homogénisez l'usage : des polices, des

On va dessiner un rectangle qui suit la souris (comme dans un logiciel de dessin pour créer un rectangle) dans un panneau qu’on placera au centre d’un JFrame. Sur l’événement

Vous pouvez d´esormais impl´ementer le corps de la m´ethode actionPerformed pour cutButton dans le constructeur d’ImageEdit : il appelle savecut() sur imagePane, ajoute la

• qnomdist : il s’agit de la fonction des quantiles, c’est-à-dire la valeur pour laquelle la fonction de répartition atteint une certaine probabilité ; dans le cas discret,

Cela permet de lancer un programme, d'ouvrir un fichier (ou un dossier), à partir de l’endroit où se trouve le raccourci (en général le bureau et dans la barre de

Par ailleurs, l'installation pour usage avec la dernière version de python n'est pas forcément simple, la dernière version de python supportée par pygame étant en général plus

Une réorganisation des composants dans la fenêtre principale à l'aide de Panels, qui sont des composants légers pouvant contenir d'autres composants.. Il est utilisé pour regrouper

Événements de haut niveau : FocusEvent (une fenêtre qui prend le focus ou la main), WindowEvent (fenêtre fermée, ouverte, icônifiée), ActionEvent (une action