Вы находитесь на странице: 1из 16

16/04/13

Clase Graphics y sus mtodos

- Clase Graphics y sus mtodos


Java proporciona la clase Graphics, que permite dibujar elipses, cuadrados, lneas, mostrar texto y tambin tiene muchos otros mtodos de dibujo. Para cualquier programador, es esencial el entendimiento de la clase Graphics, antes de adentrarse en el dibujo en Java. La clase Graphics proporciona el entorno de trabajo para cualquier operacin grfica que se realice dentro del AWT. Para poder pintar, un programa necesita un contexto grfico vlido, representado por una instancia de la clase Graphics. Pero esta clase no se puede instanciar directamente; as que debemos crear un componente y pasarlo al programa como un argumento al mtodo paint(). El nico argumento del mtodo paint() es un objeto de esta clase. La clase Graphics dispone de mtodos para soportar tres categoras de operaciones grficas: 1) Dibujo de primitivas grficas, 2) Dibujo de texto, 3) Presentacin de imgenes en formatos *.gif y *.jpeg. Adems, la clase Graphics mantiene un contexto grfico: un rea de dibujo actual, un color de dibujo del Background y otro del Foreground, un Font con todas sus propiedades, etc.Los ejes estn situados en la esquina superior izquierda. Las coordenadas se miden siempre en pixels.

Problema 1
Crear una aplicacin que utilice las primitivas grficas principales que provee la clase Graphics:

i m p o r tj a v a . a w t . B o r d e r L a y o u t ; i m p o r tj a v a . a w t . C o l o r ; i m p o r tj a v a . a w t . E v e n t Q u e u e ; i m p o r tj a v a . a w t . G r a p h i c s ; i m p o r tj a v a x . s w i n g . J F r a m e ; i m p o r tj a v a x . s w i n g . J P a n e l ; i m p o r tj a v a x . s w i n g . b o r d e r . E m p t y B o r d e r ;
www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40 1/16

16/04/13

Clase Graphics y sus mtodos

p u b l i cc l a s sG r a f i c o 1e x t e n d sJ F r a m e{ p r i v a t eJ P a n e lc o n t e n t P a n e ; / * * *L a u n c ht h ea p p l i c a t i o n . * / p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ){ E v e n t Q u e u e . i n v o k e L a t e r ( n e wR u n n a b l e ( ){ p u b l i cv o i dr u n ( ){ t r y{ G r a f i c o 1f r a m e=n e wG r a f i c o 1 ( ) ; f r a m e . s e t V i s i b l e ( t r u e ) ; }c a t c h( E x c e p t i o ne ){ e . p r i n t S t a c k T r a c e ( ) ; } } } ) ; } / * * *C r e a t et h ef r a m e . * / p u b l i cG r a f i c o 1 ( ){ 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 ) ; s e t B o u n d s ( 1 0 0 ,1 0 0 ,4 5 0 ,3 0 0 ) ; c o n t e n t P a n e=n e wJ P a n e l ( ) ; c o n t e n t P a n e . s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 ,5 ,5 ,5 ) ) ; s e t C o n t e n t P a n e ( c o n t e n t P a n e ) ; c o n t e n t P a n e . s e t L a y o u t ( n u l l ) ; s e t B o u n d s ( 0 , 0 , 8 0 0 , 6 0 0 ) ; } p u b l i cv o i dp a i n t( G r a p h i c sg ) { s u p e r . p a i n t ( g ) ; g . s e t C o l o r( C o l o r . b l u e ) ; g . d r a w L i n e( 0 ,7 0 ,1 0 0 ,7 0 ) ; g . d r a w R e c t( 1 5 0 ,7 0 ,5 0 ,7 0 ) ; g . d r a w R o u n d R e c t( 2 5 0 ,7 0 ,5 0 ,7 0 ,6 ,6 ) ; g . d r a w O v a l( 3 5 0 ,7 0 ,5 0 ,7 0 ) ; i n t[ ]v x 1={ 5 0 0 ,5 5 0 ,4 5 0 } ; i n t[ ]v y 1={ 7 0 ,1 2 0 ,1 2 0 } ; g . d r a w P o l y g o n( v x 1 ,v y 1 ,3 ) ; g . s e t C o l o r( C o l o r . r e d ) ; g . f i l l R e c t( 1 5 0 ,2 7 0 ,5 0 ,7 0 ) ; g . f i l l R o u n d R e c t( 2 5 0 ,2 7 0 ,5 0 ,7 0 ,6 ,6 ) ; g . f i l l O v a l( 3 5 0 ,2 7 0 ,5 0 ,7 0 ) ; i n t[ ]v x 2={ 5 0 0 ,5 5 0 ,4 5 0 } ; i n t[ ]v y 2={ 2 7 0 ,3 2 0 ,3 2 0 } ; g . f i l l P o l y g o n( v x 2 ,v y 2 ,3 ) ;

Sobreescribimos el mtodo paint heredado de la clase JFrame:

www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40

2/16

16/04/13

Clase Graphics y sus mtodos

p u b l i cv o i dp a i n t( G r a p h i c sg ) { El mtodo paint se ejecuta cada vez que el JFrame debe ser redibujado y llega como parmetro un objeto de la clase Graphics. Este objeto nos permite acceder al fondo del JFrame y utilizando las primitivas grficas dibujar lneas, rectngulos, elipses etc. Lo primero que hacemos dentro de este mtodo es llamar al mtodo paint de la clase superior para que se pinte el fondo del JFrame y otras componentes contenidas dentro (para llamar al mtodo paint de la clase JFrame debemos anteceder la palabra clave super y pasar el parmetro respectivo): s u p e r . p a i n t ( g ) ; Mediante el mtodo setColor activamos un color: g . s e t C o l o r( C o l o r . b l u e ) ; Dibuja una lnea desde la coordenada (0,70) es decir columna 0 y fila 70 en pxeles, hasta la coordenada (100,70). La lnea es de color azul: g . d r a w L i n e( 0 ,7 0 ,1 0 0 ,7 0 ) ; Dibujamos un rectngulo desde la coordenada (150,70) con un ancho de 50 pxeles y un alto de 70, solo se pinta el permetro del rectngulo de color azul): g . d r a w R e c t( 1 5 0 ,7 0 ,5 0 ,7 0 ) ; Similar a drawRect ms un valor de redondeo de los vertices que le indicamos en el quinto y sexto parmetro: g . d r a w R o u n d R e c t( 2 5 0 ,7 0 ,5 0 ,7 0 ,6 ,6 ) ; Dibujamos un valo: g . d r a w O v a l( 3 5 0 ,7 0 ,5 0 ,7 0 ) ; Dibujamos un tringulo (debemos indicar mediante dos vectores los vrtices de cada punto del tringulo), el primer punto es el (500,70) el segundo punto es el (550,120) y por ltimo el punto (450,120): i n t[ ]v x 1={ 5 0 0 ,5 5 0 ,4 5 0 } ; i n t[ ]v y 1={ 7 0 ,1 2 0 ,1 2 0 } ; g . d r a w P o l y g o n( v x 1 ,v y 1 ,3 ) ; De forma similar los mtodos fillRect, fillRoundRect, fillOval y fillPolygon son similares a los anteriores con la diferencia que pinta su interior con el color activo de la ltima llamada al mtodo setColor: g . s e t C o l o r( C o l o r . r e d ) ; g . f i l l R e c t( 1 5 0 ,2 7 0 ,5 0 ,7 0 ) ; g . f i l l R o u n d R e c t( 2 5 0 ,2 7 0 ,5 0 ,7 0 ,6 ,6 ) ; g . f i l l O v a l( 3 5 0 ,2 7 0 ,5 0 ,7 0 ) ; i n t[ ]v x 2={ 5 0 0 ,5 5 0 ,4 5 0 } ; i n t[ ]v y 2={ 2 7 0 ,3 2 0 ,3 2 0 } ; g . f i l l P o l y g o n( v x 2 ,v y 2 ,3 ) ; Dibujar texto
www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40 3/16

16/04/13

Clase Graphics y sus mtodos

La clase Graphics permite ?dibujar? texto, como alternativa al texto mostrado en los componentes JLabel, JTextField y JTextArea. El mtodo que permite graficar texto sobre el JFrame es: d r a w S t r i n g ( S t r i n gs t r ,i n tx ,i n ty ) ;

Problema 2
Crear una aplicacin que utilice las primitiva drawString de Java:

i m p o r tj a v a . a w t . B o r d e r L a y o u t ; i m p o r tj a v a . a w t . C o l o r ; i m p o r tj a v a . a w t . E v e n t Q u e u e ; i m p o r tj a v a . a w t . G r a p h i c s ; i m p o r tj a v a x . s w i n g . J F r a m e ; i m p o r tj a v a x . s w i n g . J P a n e l ; i m p o r tj a v a x . s w i n g . b o r d e r . E m p t y B o r d e r ; p u b l i cc l a s sG r a f i c o 1e x t e n d sJ F r a m e{ p r i v a t eJ P a n e lc o n t e n t P a n e ; / * * *L a u n c ht h ea p p l i c a t i o n . * / p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ){ E v e n t Q u e u e . i n v o k e L a t e r ( n e wR u n n a b l e ( ){ p u b l i cv o i dr u n ( ){ t r y{ G r a f i c o 1f r a m e=n e wG r a f i c o 1 ( ) ; f r a m e . s e t V i s i b l e ( t r u e ) ; }c a t c h( E x c e p t i o ne ){ e . p r i n t S t a c k T r a c e ( ) ; } } } ) ; } / * * *C r e a t et h ef r a m e . * / p u b l i cG r a f i c o 1 ( ){ 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 ) ; s e t B o u n d s ( 1 0 0 ,1 0 0 ,4 5 0 ,3 0 0 ) ; c o n t e n t P a n e=n e wJ P a n e l ( ) ; c o n t e n t P a n e . s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 ,5 ,5 ,5 ) ) ; c o n t e n t P a n e . s e t L a y o u t ( n e wB o r d e r L a y o u t ( 0 ,0 ) ) ; s e t C o n t e n t P a n e ( c o n t e n t P a n e ) ; s e t B o u n d s ( 0 , 0 , 8 0 0 , 6 0 0 ) ; } p u b l i cv o i dp a i n t( G r a p h i c sg ) { s u p e r . p a i n t ( g ) ; g . s e t C o l o r( C o l o r . b l u e ) ; g . d r a w S t r i n g ( " P r i m e rl i n e a " , 1 0 , 2 0 0 ) ; g . d r a w S t r i n g ( " S e g u n d al i n e a " , 1 0 , 3 0 0 ) ;


www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40 4/16

16/04/13

Clase Graphics y sus mtodos

} }
Clase Color La clase java.awt.Color encapsula colores utilizando el formato RGB (Red, Green, Blue). Las componentes de cada color primario en el color resultante se expresan con nmeros enteros entre 0 y 255, siendo 0 la intensidad mnima de ese color y 255 la mxima. En la clase Color existen constantes para colores predeterminados de uso frecuente: black, white, green, blue, red, yellow, magenta, cyan, orange, pink, gray, darkGray, lightGray.

Problema 3
Crear una aplicacin que dibuje 255 lneas creando un color distinto para cada una de ellas:

i m p o r tj a v a . a w t . B o r d e r L a y o u t ; i m p o r tj a v a . a w t . C o l o r ; i m p o r tj a v a . a w t . E v e n t Q u e u e ; i m p o r tj a v a . a w t . G r a p h i c s ; i m p o r tj a v a x . s w i n g . J F r a m e ; i m p o r tj a v a x . s w i n g . J P a n e l ; i m p o r tj a v a x . s w i n g . b o r d e r . E m p t y B o r d e r ; p u b l i cc l a s sG r a f i c o 1e x t e n d sJ F r a m e{ p r i v a t eJ P a n e lc o n t e n t P a n e ; / * * *L a u n c ht h ea p p l i c a t i o n . * / p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ){ E v e n t Q u e u e . i n v o k e L a t e r ( n e wR u n n a b l e ( ){ p u b l i cv o i dr u n ( ){ t r y{ G r a f i c o 1f r a m e=n e wG r a f i c o 1 ( ) ; f r a m e . s e t V i s i b l e ( t r u e ) ; }c a t c h( E x c e p t i o ne ){ e . p r i n t S t a c k T r a c e ( ) ; } } } ) ; } / * *
www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40 5/16

16/04/13

Clase Graphics y sus mtodos

*C r e a t et h ef r a m e . * / p u b l i cG r a f i c o 1 ( ){ 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 ) ; s e t B o u n d s ( 1 0 0 ,1 0 0 ,4 5 0 ,3 0 0 ) ; c o n t e n t P a n e=n e wJ P a n e l ( ) ; c o n t e n t P a n e . s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 ,5 ,5 ,5 ) ) ; c o n t e n t P a n e . s e t L a y o u t ( n e wB o r d e r L a y o u t ( 0 ,0 ) ) ; s e t C o n t e n t P a n e ( c o n t e n t P a n e ) ; s e t B o u n d s ( 0 , 0 , 8 0 0 , 2 5 5 ) ; } p u b l i cv o i dp a i n t( G r a p h i c sg ) { s u p e r . p a i n t ( g ) ; i n tf i l a=0 ; f o r( i n tr o j o=0;r o j o< =2 5 5;r o j o + + ) { C o l o rc o l=n e wC o l o r( r o j o ,0 ,0 ) ; g . s e t C o l o r( c o l ) ; g . d r a w L i n e( 0 ,f i l a ,8 0 0 ,f i l a ) ; f i l a + + ; } } }


Dentro de un for creamos objetos de la clase Color y fijamos el color de la lnea seguidamente (con esto logramos un degrad del negro al rojo): i n tf i l a=0 ; f o r( i n tr o j o=0;r o j o< =2 5 5;r o j o + + ) { C o l o rc o l=n e wC o l o r( r o j o ,0 ,0 ) ; g . s e t C o l o r( c o l ) ; g . d r a w L i n e( 0 ,f i l a ,8 0 0 ,f i l a ) ; f i l a + + ; } Presentacin de imgenes Java permite incorporar imgenes de tipo GIF y JPEG definidas en ficheros. Se dispone para ello de la clase java.awt.Image. Para cargar una imagen hay que indicar la localizacin del archivo y cargarlo mediante el mtodo getImage(). Este mtodo existe en las clases java.awt.Toolkit. Entonces, para cargar una imagen hay que comenzar creando un objeto (o una referencia) Image y llamar al mtodo getImage() (de Toolkit); Una vez cargada la imagen, hay que representarla, para lo cual se redefine el mtodo paint() para llamar al mtodo drawImage() de la clase Graphics. Los objetos Graphics pueden mostrar imgenes a travs del mtodo: drawImage(). Dicho mtodo admite varias formas, aunque casi siempre hay que incluir el nombre del objeto imagen creado. Clase Image Una imagen es un objeto grfico rectangular compuesto por pixels coloreados. Cada pixel en una imagen describe un color de una particular localizacin de la imagen. A continuacin, algunos mtodos de la clase Image: La clase Graphics provee el mtodo drawImage() para dibujar imagenes; este mtodo admite varias formas: -d r a w I m a g e( I m a g ei ,i n tx ,i n ty ,I m a g e O b s e r v e ro )
www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40 6/16

16/04/13

Clase Graphics y sus mtodos

-d r a w I m a g e( I m a g ei , i n tx , i n ty , i n tw i d t h , i n th e i g h t , I m a g e O b s e r v e ro )

Problema 4
Crear una aplicacin que muestre un archivo jpg dentro de un JFrame.

Luego de crear el proyecto debemos disponer un archivo en la carpeta raiz del proyecto (el archivo debe llamarse imagen1.jpg)

i m p o r tj a v a . a w t . B o r d e r L a y o u t ; i m p o r tj a v a . a w t . E v e n t Q u e u e ; i m p o r tj a v a . a w t . G r a p h i c s ; i m p o r tj a v a . a w t . I m a g e ; i m p o r tj a v a . a w t . T o o l k i t ; i m p o r tj a v a x . s w i n g . J F r a m e ; i m p o r tj a v a x . s w i n g . J P a n e l ; i m p o r tj a v a x . s w i n g . b o r d e r . E m p t y B o r d e r ; p u b l i cc l a s sG r a f i c o 1e x t e n d sJ F r a m e{ p r i v a t eJ P a n e lc o n t e n t P a n e ; / * * *L a u n c ht h ea p p l i c a t i o n . * / p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ){ E v e n t Q u e u e . i n v o k e L a t e r ( n e wR u n n a b l e ( ){ p u b l i cv o i dr u n ( ){ t r y{ G r a f i c o 1f r a m e=n e wG r a f i c o 1 ( ) ; f r a m e . s e t V i s i b l e ( t r u e ) ; }c a t c h( E x c e p t i o ne ){ e . p r i n t S t a c k T r a c e ( ) ; } } } ) ; } / * * *C r e a t et h ef r a m e . * /
www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40 7/16

16/04/13

Clase Graphics y sus mtodos

p u b l i cG r a f i c o 1 ( ){ 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 ) ; s e t B o u n d s ( 1 0 0 ,1 0 0 ,4 5 0 ,3 0 0 ) ; c o n t e n t P a n e=n e wJ P a n e l ( ) ; c o n t e n t P a n e . s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 ,5 ,5 ,5 ) ) ; c o n t e n t P a n e . s e t L a y o u t ( n e wB o r d e r L a y o u t ( 0 ,0 ) ) ; s e t C o n t e n t P a n e ( c o n t e n t P a n e ) ; s e t B o u n d s ( 0 , 0 , 8 0 0 , 6 0 0 ) ; } p u b l i cv o i dp a i n t( G r a p h i c sg ) { s u p e r . p a i n t ( g ) ; T o o l k i tt=T o o l k i t . g e t D e f a u l t T o o l k i t( ) ; I m a g ei m a g e n=t . g e t I m a g e( " i m a g e n 1 . j p g " ) ; g . d r a w I m a g e( i m a g e n ,0 ,0 ,t h i s ) ; } }


Creamos un objeto de la clase Toolkit llamando al mtodo esttico de la misma clase: T o o l k i tt=T o o l k i t . g e t D e f a u l t T o o l k i t( ) ; Creamos un objeto de la clase Image llamando al mtodo getImage de la clase Toolkit pasando como parmetro el archivo con la imagen: I m a g ei m a g e n=t . g e t I m a g e( " i m a g e n 1 . j p g " ) ; Por ltimo llamamos al mtodo drawImage con la referencia al objeto de tipo Image, la columna, la fila y la referencia al JFrame donde debe dibujarse: g . d r a w I m a g e( i m a g e n ,0 ,0 ,t h i s ) ; Mtodo repaint() Este es el mtodo que con ms frecuencia es llamado por el programador. El mtodo repaint() llama ?lo antes posible? al mtodo paint() del componente. El mtodo repaint() puede ser: r e p a i n t ( ) r e p a i n t ( i n tx ,i n ty ,i n tw ,i n th ) Las segunda forma permiten definir una zona rectangular de la ventana a la que aplicar el mtodo.

Problema 5
Crear una aplicacin que muestre un crculo en medio de la pantalla y mediante dos botones permitir que se desplace a izquierda o derecha.

i m p o r tj a v a . a w t . C o l o r ; i m p o r tj a v a . a w t . E v e n t Q u e u e ; i m p o r tj a v a . a w t . G r a p h i c s ;
www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40 8/16

16/04/13

Clase Graphics y sus mtodos

i m p o r tj a v a x . s w i n g . J F r a m e ; i m p o r tj a v a x . s w i n g . J P a n e l ; i m p o r tj a v a x . s w i n g . b o r d e r . E m p t y B o r d e r ; i m p o r tj a v a x . s w i n g . J B u t t o n ; i m p o r tj a v a . a w t . e v e n t . A c t i o n L i s t e n e r ; i m p o r tj a v a . a w t . e v e n t . A c t i o n E v e n t ; p u b l i cc l a s sG r a f i c o 1e x t e n d sJ F r a m e{ p r i v a t eJ P a n e lc o n t e n t P a n e ; / * * *L a u n c ht h ea p p l i c a t i o n . * / p r i v a t ei n tc o l u m n a ; p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ){ E v e n t Q u e u e . i n v o k e L a t e r ( n e wR u n n a b l e ( ){ p u b l i cv o i dr u n ( ){ t r y{ G r a f i c o 1f r a m e=n e wG r a f i c o 1 ( ) ; f r a m e . s e t V i s i b l e ( t r u e ) ; }c a t c h( E x c e p t i o ne ){ e . p r i n t S t a c k T r a c e ( ) ; } } } ) ; } / * * *C r e a t et h ef r a m e . * / p u b l i cG r a f i c o 1 ( ){ 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 ) ; s e t B o u n d s ( 1 0 0 ,1 0 0 ,4 5 0 ,3 0 0 ) ; c o n t e n t P a n e=n e wJ P a n e l ( ) ; c o n t e n t P a n e . s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 ,5 ,5 ,5 ) ) ; s e t C o n t e n t P a n e ( c o n t e n t P a n e ) ; c o n t e n t P a n e . s e t L a y o u t ( n u l l ) ; J B u t t o nb i=n e wJ B u t t o n ( " I z q u i e r d a " ) ; b i . a d d A c t i o n L i s t e n e r ( n e wA c t i o n L i s t e n e r ( ){ p u b l i cv o i da c t i o n P e r f o r m e d ( A c t i o n E v e n ta r g 0 ){ c o l u m n a = c o l u m n a 1 0 ; r e p a i n t ( ) ; } } ) ; b i . s e t B o u n d s ( 1 0 5 ,4 8 2 ,8 9 ,2 3 ) ; c o n t e n t P a n e . a d d ( b i ) ; J B u t t o nb d=n e wJ B u t t o n ( " D e r e c h a " ) ; b d . a d d A c t i o n L i s t e n e r ( n e wA c t i o n L i s t e n e r ( ){ p u b l i cv o i da c t i o n P e r f o r m e d ( A c t i o n E v e n te ){ c o l u m n a = c o l u m n a + 1 0 ; r e p a i n t ( ) ; } } ) ; b d . s e t B o u n d s ( 5 5 6 ,4 8 2 ,8 9 ,2 3 ) ; c o n t e n t P a n e . a d d ( b d ) ;


www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40 9/16

16/04/13

Clase Graphics y sus mtodos

s e t B o u n d s ( 0 , 0 , 8 0 0 , 6 0 0 ) ; c o l u m n a = 4 0 0 ;

p u b l i cv o i dp a i n t( G r a p h i c sg ) { s u p e r . p a i n t ( g ) ; g . s e t C o l o r( C o l o r . r e d ) ; g . f i l l O v a l( c o l u m n a ,3 0 0 ,1 0 0 ,1 0 0 ) ; } }

Definimos un atributo columna: p r i v a t ei n tc o l u m n a ; Cuando se presiona el botn (bi) restamos 10 al atributo columna y pedimos que se ejecute el mtodo paint (esto ltimo llamando al mtodo repaint()), el mtodo repaint borra todo lo dibujado dentro del JFrame y llama al paint: b i . a d d A c t i o n L i s t e n e r ( n e wA c t i o n L i s t e n e r ( ){ p u b l i cv o i da c t i o n P e r f o r m e d ( A c t i o n E v e n ta r g 0 ){ c o l u m n a = c o l u m n a 1 0 ; r e p a i n t ( ) ; } } ) ; El mtodo paint dibuja un crculo utilizando como posicin el valor del atributo columna: p u b l i cv o i dp a i n t( G r a p h i c sg ) { s u p e r . p a i n t ( g ) ; g . s e t C o l o r( C o l o r . r e d ) ; g . f i l l O v a l( c o l u m n a ,3 0 0 ,1 0 0 ,1 0 0 ) ; }

Problema 6
Se debe desarrollar una pantalla para configurar ciertas caractersticas de un procesador de texto. Debe aparecer y poder seleccionarse los mrgenes superior e inferior de la pgina. Los mrgenes pueden ir en el rango de 0 a 10. Desplazar las lneas a medida que modificamos los mrgenes. Por otro lado tenemos la orientacin de pgina. La misma se administra a travs de un JComboBox que tiene dos valores posibles (Horizontal y Vertical). Cuando est seleccionado en el JComboBox el String Horizontal dibujar un rectngulo con base mayor a la altura, y cuando est seleccionado el String Vertical dibujar un rectngulo con una base menor. Cuando se presiona el botn inicializar la configuracin de mrgenes se inicializan con 0 y se selecciona orientacin horizontal.

www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40

10/16

16/04/13

Clase Graphics y sus mtodos

Para implementar esta aplicacin con el WindowBuilder creamos la interfaz visual, disponemos 4 objetos de la clase JLabel, dos JSpinner, un JButton y un objeto de la clase JComboBox. El dibulo de la hoja con las lneas de mrgenes superior e inferior como el grfico de orientacin de la hoja se hacen en el mtodo paint. El cdigo fuente que resuelve esta aplicacin es:

i m p o r tj a v a . a w t . C o l o r ; i m p o r tj a v a . a w t . E v e n t Q u e u e ; i m p o r tj a v a . a w t . G r a p h i c s ; i m p o r tj a v a x . s w i n g . J F r a m e ; i m p o r tj a v a x . s w i n g . J P a n e l ; i m p o r tj a v a x . s w i n g . b o r d e r . E m p t y B o r d e r ; i m p o r tj a v a x . s w i n g . J S p i n n e r ; i m p o r tj a v a x . s w i n g . J L a b e l ; i m p o r tj a v a x . s w i n g . J C o m b o B o x ; i m p o r tj a v a x . s w i n g . D e f a u l t C o m b o B o x M o d e l ; i m p o r tj a v a x . s w i n g . J B u t t o n ; i m p o r tj a v a x . s w i n g . S p i n n e r N u m b e r M o d e l ; i m p o r tj a v a x . s w i n g . e v e n t . C h a n g e L i s t e n e r ; i m p o r tj a v a x . s w i n g . e v e n t . C h a n g e E v e n t ; i m p o r tj a v a . a w t . e v e n t . I t e m L i s t e n e r ; i m p o r tj a v a . a w t . e v e n t . I t e m E v e n t ; i m p o r tj a v a . a w t . e v e n t . A c t i o n L i s t e n e r ; i m p o r tj a v a . a w t . e v e n t . A c t i o n E v e n t ; p u b l i cc l a s sP r o c e s a d o r T e x t oe x t e n d sJ F r a m e{ p r i v a t eJ P a n e lc o n t e n t P a n e ; p r i v a t eJ S p i n n e rs p 1 ; p r i v a t eJ S p i n n e rs p 2 ; p r i v a t eJ C o m b o B o xc o m b o B o x ; / * * *L a u n c ht h ea p p l i c a t i o n .
www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40 11/16

16/04/13

Clase Graphics y sus mtodos

* / p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ){ E v e n t Q u e u e . i n v o k e L a t e r ( n e wR u n n a b l e ( ){ p u b l i cv o i dr u n ( ){ t r y{ P r o c e s a d o r T e x t of r a m e=n e wP r o c e s a d o r T e x t o ( ) ; f r a m e . s e t V i s i b l e ( t r u e ) ; }c a t c h( E x c e p t i o ne ){ e . p r i n t S t a c k T r a c e ( ) ; } } } ) ; } / * * *C r e a t et h ef r a m e . * / p u b l i cP r o c e s a d o r T e x t o ( ){ 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 ) ; s e t B o u n d s ( 1 0 0 ,1 0 0 ,5 7 3 ,4 8 1 ) ; c o n t e n t P a n e=n e wJ P a n e l ( ) ; c o n t e n t P a n e . s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 ,5 ,5 ,5 ) ) ; s e t C o n t e n t P a n e ( c o n t e n t P a n e ) ; c o n t e n t P a n e . s e t L a y o u t ( n u l l ) ; s p 1=n e wJ S p i n n e r ( ) ; s p 1 . a d d C h a n g e L i s t e n e r ( n e wC h a n g e L i s t e n e r ( ){ p u b l i cv o i ds t a t e C h a n g e d ( C h a n g e E v e n ta r g 0 ){ r e p a i n t ( ) ; } } ) ; s p 1 . s e t M o d e l ( n e wS p i n n e r N u m b e r M o d e l ( 0 ,0 ,1 0 ,1 ) ) ; s p 1 . s e t B o u n d s ( 1 6 2 ,5 1 ,5 5 ,2 8 ) ; c o n t e n t P a n e . a d d ( s p 1 ) ; s p 2=n e wJ S p i n n e r ( ) ; s p 2 . a d d C h a n g e L i s t e n e r ( n e wC h a n g e L i s t e n e r ( ){ p u b l i cv o i ds t a t e C h a n g e d ( C h a n g e E v e n te ){ r e p a i n t ( ) ; } } ) ; s p 2 . s e t M o d e l ( n e wS p i n n e r N u m b e r M o d e l ( 0 ,0 ,1 0 ,1 ) ) ; s p 2 . s e t B o u n d s ( 1 6 2 ,1 5 0 ,5 5 ,2 8 ) ; c o n t e n t P a n e . a d d ( s p 2 ) ; J L a b e ll b l M a r g e n I n f e r i o r=n e wJ L a b e l ( " M a r g e ni n f e r i o r " ) ; l b l M a r g e n I n f e r i o r . s e t B o u n d s ( 1 6 2 ,2 6 ,1 0 9 ,1 4 ) ; c o n t e n t P a n e . a d d ( l b l M a r g e n I n f e r i o r ) ; J L a b e ll b l M a r g e n S u p e r i o r=n e wJ L a b e l ( " M a r g e ns u p e r i o r " ) ; l b l M a r g e n S u p e r i o r . s e t B o u n d s ( 1 6 2 ,1 2 7 ,1 0 9 ,1 4 ) ; c o n t e n t P a n e . a d d ( l b l M a r g e n S u p e r i o r ) ; J L a b e ll b l H o j a=n e wJ L a b e l ( " H o j a " ) ; l b l H o j a . s e t B o u n d s ( 4 6 ,2 6 ,4 6 ,1 4 ) ; c o n t e n t P a n e . a d d ( l b l H o j a ) ; c o m b o B o x=n e wJ C o m b o B o x ( ) ; c o m b o B o x . a d d I t e m L i s t e n e r ( n e wI t e m L i s t e n e r ( ){ p u b l i cv o i di t e m S t a t e C h a n g e d ( I t e m E v e n ta r g 0 ){ r e p a i n t ( ) ;
www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40 12/16

16/04/13

Clase Graphics y sus mtodos

} } ) ; c o m b o B o x . s e t M o d e l ( n e wD e f a u l t C o m b o B o x M o d e l ( n e wS t r i n g [ ]{ " H o r i z o n t a l " ," V e r t i c a l c o m b o B o x . s e t B o u n d s ( 3 2 1 ,5 5 ,1 9 6 ,2 0 ) ; c o n t e n t P a n e . a d d ( c o m b o B o x ) ; J L a b e ll b l H o r i e n t a c i n D e P g i n a=n e wJ L a b e l ( " H o r i e n t a c i u 0 0 F 3 nd ep u 0 0 E 1 g i n a . " ) ; l b l H o r i e n t a c i n D e P g i n a . s e t B o u n d s ( 3 2 1 ,2 6 ,2 0 3 ,1 4 ) ; c o n t e n t P a n e . a d d ( l b l H o r i e n t a c i n D e P g i n a ) ; J B u t t o nb t n I n i c i a l i z a r=n e wJ B u t t o n ( " I n i c i a l i z a r " ) ; b t n I n i c i a l i z a r . a d d A c t i o n L i s t e n e r ( n e wA c t i o n L i s t e n e r ( ){ p u b l i cv o i da c t i o n P e r f o r m e d ( A c t i o n E v e n ta r g 0 ){ s p 1 . s e t V a l u e ( 0 ) ; s p 2 . s e t V a l u e ( 0 ) ; c o m b o B o x . s e t S e l e c t e d I n d e x ( 0 ) ; r e p a i n t ( ) ; } } ) ; b t n I n i c i a l i z a r . s e t B o u n d s ( 4 5 ,2 4 7 ,1 6 5 ,2 3 ) ; c o n t e n t P a n e . a d d ( b t n I n i c i a l i z a r ) ;

p u b l i cv o i dp a i n t ( G r a p h i c sg ) { s u p e r . p a i n t ( g ) ; g . s e t C o l o r ( C o l o r . b l u e ) ; g . d r a w R e c t ( 3 0 , 8 0 , 1 0 0 , 1 4 0 ) ; i n tm s = I n t e g e r . p a r s e I n t ( s p 1 . g e t V a l u e ( ) . t o S t r i n g ( ) ) ; i n tm i = I n t e g e r . p a r s e I n t ( s p 2 . g e t V a l u e ( ) . t o S t r i n g ( ) ) ; g . s e t C o l o r ( C o l o r . r e d ) ; g . d r a w L i n e ( 3 0 , 8 0 + m s , 1 3 0 , 8 0 + m s ) ; g . d r a w L i n e ( 3 0 , 2 2 0 m i , 1 3 0 , 2 2 0 m i ) ; S t r i n gd i r e c c i o n = ( S t r i n g ) c o m b o B o x . g e t S e l e c t e d I t e m ( ) ; i f( d i r e c c i o n . e q u a l s ( " H o r i z o n t a l " ) ) g . d r a w R e c t ( 3 2 0 , 1 2 0 , 2 0 0 , 1 0 0 ) ; e l s e g . d r a w R e c t ( 3 2 0 , 1 2 0 , 1 0 0 , 2 0 0 ) ; }

Explicacin del cdigo. Para el evento stateChanged de los controles JSpinner se debe llamar al mtodo repaint() para que se grafique nuevamente las lneas de mrgenes: s p 1 . a d d C h a n g e L i s t e n e r ( n e wC h a n g e L i s t e n e r ( ){ p u b l i cv o i ds t a t e C h a n g e d ( C h a n g e E v e n ta r g 0 ){ r e p a i n t ( ) ; } } ) ; s p 2 . a d d C h a n g e L i s t e n e r ( n e wC h a n g e L i s t e n e r ( ){ p u b l i cv o i ds t a t e C h a n g e d ( C h a n g e E v e n te ){ r e p a i n t ( ) ; } } ) ;

www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40

13/16

16/04/13

Clase Graphics y sus mtodos

En el mtodo paint dibujamos primero un rectngulo de color azul que representa la hoja: g . s e t C o l o r ( C o l o r . b l u e ) ; g . d r a w R e c t ( 3 0 , 8 0 , 1 0 0 , 1 4 0 ) ; Extraemos los valores seleccionados de cada control JSpinner y los convertimos a tipo entero: i n tm s = I n t e g e r . p a r s e I n t ( s p 1 . g e t V a l u e ( ) . t o S t r i n g ( ) ) ; i n tm i = I n t e g e r . p a r s e I n t ( s p 2 . g e t V a l u e ( ) . t o S t r i n g ( ) ) ; Activamos el color rojo y dibujamos las dos lneas, la superior coincide con el comienzo del rectngulo (sumamos tantos pixeles en la fila como lo indica el primer JSpinner):

g . s e t C o l o r ( C o l o r . r e d ) ; g . d r a w L i n e ( 3 0 , 8 0 + m s , 1 3 0 , 8 0 + m s ) ; La segunda lnea le restamos el valor del JSpinner: g . d r a w L i n e ( 3 0 , 2 2 0 m i , 1 3 0 , 2 2 0 m i ) ; Para saber la orientacin de la hoja debemos extraer el valor seleccionado del JComboBox y mediante un if verificar si el String seleccionado es "Horizontal": S t r i n gd i r e c c i o n = ( S t r i n g ) c o m b o B o x . g e t S e l e c t e d I t e m ( ) ; i f( d i r e c c i o n . e q u a l s ( " H o r i z o n t a l " ) ) g . d r a w R e c t ( 3 2 0 , 1 2 0 , 2 0 0 , 1 0 0 ) ; e l s e g . d r a w R e c t ( 3 2 0 , 1 2 0 , 1 0 0 , 2 0 0 ) ; Por ltimo cuando se presiona el botn inicializar procedemos a fijar nuevos valores a los JSpinner y al JComboBox (luego redibujamos): b t n I n i c i a l i z a r . a d d A c t i o n L i s t e n e r ( n e wA c t i o n L i s t e n e r ( ){ p u b l i cv o i da c t i o n P e r f o r m e d ( A c t i o n E v e n ta r g 0 ){ s p 1 . s e t V a l u e ( 0 ) ; s p 2 . s e t V a l u e ( 0 ) ; c o m b o B o x . s e t S e l e c t e d I n d e x ( 0 ) ; r e p a i n t ( ) ; } } ) ;

Problemas propuestos
1. Confeccionar un programa que permita configurar las caractersticas del mouse. Por un lado debemos seleccionar la velocidad de desplazamiento de la flecha del mouse. Disponer un JSpinner para poder seleccionarse los valores 0,25,50,75 y 100. Por otro lado debemos poder seleccionar cual de los dos botones del mouse ser el principal, tenemos para esta funcin un JComboBox con dos opciones: izquierdo o derecho. Cuando se selecciona el botn (cambio en el JComboBox) actualizar el grfico mostrando el botn del mouse seleccionado (graficar en el mtodo paint el mouse en pantalla)

www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40

14/16

16/04/13

Clase Graphics y sus mtodos

2.

En una aduana hay una mquina que sortea las personas cuyo equipaje sern revisados. La persona selecciona si viene del Interior del pas o del Exterior (a travs de un JComboBox), y por otro lado selecciona la cantidad de bultos (JSpinner). Luego presiona el botn sortear y aparece al lado de este botn un crculo rojo o verde. (En caso de ser rojo se revisa su equipaje, en caso de ser verde, no se revisa) Para el sorteo generar un valor aleatorio entre 1 y 3. Si se genera un 1 se revisa, si se genera un 2 o 3 no se revisa. Validar que tambin este seleccionado un valor distinto a cero en bultos (los valores pueden ir de 0 a 10). Si la cantidad de bultos supera a 5 se revisa siempre sus bultos (es decir que aparece un crculo rojo). Luego de sortear fijar en cero cantidad de bultos. Mostrar en el ttulo del JFrame la cantidad de bultos revisados y no revisados hasta el momento.

www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40

15/16

16/04/13

Clase Graphics y sus mtodos

Retornar

www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40

16/16