You are on page 1of 16

16/04/13

Clase Graphics y sus métodos

- Clase Graphics y sus métodos
Java proporciona la clase Graphics, que permite dibujar elipses, cuadrados, líneas, mostrar texto y también tiene muchos otros métodos 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 operación gráfica que se realice dentro del AWT. Para poder pintar, un programa necesita un contexto gráfico válido, 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 método paint(). El único argumento del método paint() es un objeto de esta clase. La clase Graphics dispone de métodos para soportar tres categorías de operaciones gráficas: 1) Dibujo de primitivas gráficas, 2) Dibujo de texto, 3) Presentación de imágenes en formatos *.gif y *.jpeg. Además, la clase Graphics mantiene un contexto gráfico: un área de dibujo actual, un color de dibujo del Background y otro del Foreground, un Font con todas sus propiedades, etc.Los ejes están situados en la esquina superior izquierda. Las coordenadas se miden siempre en pixels.

Problema 1
Crear una aplicación que utilice las primitivas gráficas 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

7 0 ) . g . * / 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 . g .1 2 0 . g .3 ) . f i l l R e c t( 1 5 0 . i n t[ ]v y 1={ 7 0 . }c a t c h( E x c e p t i o ne ){ e . g . s e t V i s i b l e ( t r u e ) . s e t B o u n d s ( 1 0 0 . d r a w P o l y g o n( v x 1 . f i l l P o l y g o n( v x 2 . } } Sobreescribimos el método paint heredado de la clase JFrame: www. E X I T _ O N _ C L O S E ) .5 . s e t C o l o r( C o l o r . g . s e t L a y o u t ( n u l l ) .7 0 ) . g .3 ) .v y 1 .3 2 0 .7 0 ) . * / 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 . 6 0 0 ) . p a i n t ( g ) . i n t[ ]v x 1={ 5 0 0 .4 5 0 } . c o n t e n t P a n e=n e wJ P a n e l ( ) . } 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 . } / * * *C r e a t et h ef r a m e .5 0 .6 ) .1 0 0 .16/04/13 Clase Graphics y sus métodos 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 . f i l l O v a l( 3 5 0 .2 7 0 . g .5 0 .5 0 .2 7 0 . i n t[ ]v y 2={ 2 7 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 ) . g . 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 ( ) .5 0 .com. g . d r a w R e c t( 1 5 0 . p r i n t S t a c k T r a c e ( ) .7 0 .7 0 ) . i n t[ ]v x 2={ 5 0 0 .7 0 .4 5 0 .ar/detalleconcepto. 0 .3 0 0 ) . c o n t e n t P a n e . 8 0 0 .4 5 0 } .5 0 .6 ) . s e t C o l o r( C o l o r . c o n t e n t P a n e . g .7 0 . d r a w O v a l( 3 5 0 . / * * *L a u n c ht h ea p p l i c a t i o n . d r a w R o u n d R e c t( 2 5 0 .5 0 .3 2 0 } .7 0 .javaya.v y 2 . g . s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 .php?codigo=130&inicio=40 2/16 .5 ) ) . f r a m e . f i l l R o u n d R e c t( 2 5 0 .5 5 0 . } } } ) . r e d ) .5 .7 0 .7 0 ) .6 . s e t B o u n d s ( 0 .1 2 0 } .2 7 0 . b l u e ) .1 0 0 . d r a w L i n e( 0 .6 .7 0 .5 5 0 .

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

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 . i m p o r tj a v a . i m p o r tj a v a x . G r a p h i c s . p r i n t S t a c k T r a c e ( ) .com. c o n t e n t P a n 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 . a w t . c o n t e n t P a n e . 1 0 . E X I T _ O N _ C L O S E ) .3 0 0 ) .1 0 0 . s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 . JTextField y JTextArea.ar/detalleconcepto. B o r d e r L a y o u t . i m p o r tj a v a x . i m p o r tj a v a . c o n t e n t P a n e=n e wJ P a n e l ( ) .5 ) ) . / * * *L a u n c ht h ea p p l i c a t i o n . J F r a m e . a w t . f r a m e . E m p t y B o r d e r . El método 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 . 3 0 0 ) . 0 . C o l o r . s e t V i s i b l e ( t r u e ) .php?codigo=130&inicio=40 4/16 . b l u e ) . s w i n g .javaya. 1 0 . d r a w S t r i n g ( " S e g u n d al i n e a " . J P a n e l . i m p o r tj a v a x . s e t B o u n d s ( 1 0 0 . s e t B o u n d s ( 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 ) . * / 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 m p o r tj a v a . E v e n t Q u e u e . s w i n g . }c a t c h( E x c e p t i o ne ){ e .5 . p a i n t ( g ) . a w t . 6 0 0 ) .16/04/13 Clase Graphics y sus métodos La clase Graphics permite ?dibujar? texto. 8 0 0 . Problema 2 Crear una aplicación que utilice las primitiva drawString de Java: i m p o r tj a v a . como alternativa al texto mostrado en los componentes JLabel.i n tx . s e t C o l o r( C o l o r . b o r d e r . g . s w i n g . 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 ( ) . } } } ) .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 . g .i n ty ) . } / * * *C r e a t et h ef r a m e .5 . g . d r a w S t r i n g ( " P r i m e rl i n e a " . s e t L a y o u t ( n e wB o r d e r L a y o u t ( 0 . a w t . www.4 5 0 . 2 0 0 ) .

red. s w i n g . blue. 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 ( ) . i m p o r tj a v a . magenta.ar/detalleconcepto. a w t . C o l o r . green. a w t . B o r d e r L a y o u t . a w t . a w t . J F r a m e . 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 . Blue). G r a p h i c s . b o r d e r . f r a m e . s w i n g . Green.Color encapsula colores utilizando el formato RGB (Red. i m p o r tj a v a . } } } ) .awt. s w i n g . / * * *L a u n c ht h ea p p l i c a t i o n . cyan. p r i n t S t a c k T r a c e ( ) . Las componentes de cada color primario en el color resultante se expresan con números enteros entre 0 y 255. i m p o r tj a v a x . darkGray. gray. * / 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 . J P a n e l .javaya. i m p o r tj a v a x . siendo 0 la intensidad mínima de ese color y 255 la máxima. En la clase Color existen constantes para colores predeterminados de uso frecuente: black. orange. i m p o r tj a v a x . } / * * www. i m p o r tj a v a . }c a t c h( E x c e p t i o ne ){ e . lightGray.com. Problema 3 Crear una aplicación que dibuje 255 líneas creando un color distinto para cada una de ellas: i m p o r tj a v a . white.php?codigo=130&inicio=40 5/16 . E m p t y B o r d e r . yellow. E v e n t Q u e u e . pink. s e t V i s i b l e ( t r u e ) .16/04/13 Clase Graphics y sus métodos } } Clase Color La clase java.

awt. A continuación. s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 .0 ) ) . s e t B o u n d s ( 0 .3 0 0 ) . g . para cargar una imagen hay que comenzar creando un objeto (o una referencia) Image y llamar al método getImage() (de Toolkit).8 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 . Este método existe en las clases java.r o j o< =2 5 5. E X I T _ O N _ C L O S E ) .f i l a .5 .ar/detalleconcepto.f i l a ) .f i l a .r o j o + + ) { C o l o rc o l=n e wC o l o r( r o j o . este método admite varias formas: -d r a w I m a g e( I m a g ei . Una vez cargada la imagen. Clase Image Una imagen es un objeto gráfico rectangular compuesto por pixels coloreados. i n tf i l a=0 .4 5 0 .i n ty .0 ) . c o n t e n t P a n e=n e wJ P a n e l ( ) . Se dispone para ello de la clase java. f o r( i n tr o j o=0. para lo cual se redefine el método paint() para llamar al método drawImage() de la clase Graphics. g .Image. Entonces.r o j o + + ) { C o l o rc o l=n e wC o l o r( r o j o .8 0 0 . 2 5 5 ) .I m a g e O b s e r v e ro ) www.f i l a ) . f o r( i n tr o j o=0. } } } Dentro de un for creamos objetos de la clase Color y fijamos el color de la línea seguidamente (con esto logramos un degradé del negro al rojo): i n tf i l a=0 . s e t L a y o u t ( n e wB o r d e r L a y o u t ( 0 . aunque casi siempre hay que incluir el nombre del objeto imagen creado. p a i n t ( g ) .com. g . c o n t e n t P a n e . g .r o j o< =2 5 5.awt. c o n t e n t P a n e .16/04/13 Clase Graphics y sus métodos *C r e a t et h ef r a m e . Los objetos Graphics pueden mostrar imágenes a través del método: drawImage().php?codigo=130&inicio=40 6/16 . s e t C o l o r( c o l ) . d r a w L i n e( 0 .i n tx . 8 0 0 . f i l a + + .5 . hay que representarla. * / 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 . s e t B o u n d s ( 1 0 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 ) .0 .5 ) ) . Dicho método admite varias formas. s e t C o l o r( c o l ) .0 ) . Cada pixel en una imagen describe un color de una particular localización de la imagen.0 . } Presentación de imágenes Java permite incorporar imágenes de tipo GIF y JPEG definidas en ficheros.Toolkit. f i l a + + .javaya. Para cargar una imagen hay que indicar la localización del archivo y cargarlo mediante el método getImage().1 0 0 . algunos métodos de la clase Image: La clase Graphics provee el método drawImage() para dibujar imagenes. d r a w L i n e( 0 .

a w t . a w t . i n tx . T o o l k i t . i m p o r tj a v a .jpg) i m p o r tj a v a . s w i n g . b o r d e r . a w t . f r a m e .javaya. a w t . Luego de crear el proyecto debemos disponer un archivo en la carpeta raiz del proyecto (el archivo debe llamarse imagen1. J P a n e l .ar/detalleconcepto. a w t . 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 ( ) . i n ty . G r a p h i c s . s w i n g . B o r d e r L a y o u 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 . I m a g e . i n th e i g h t . } / * * *C r e a t et h ef r a m e . }c a t c h( E x c e p t i o ne ){ e . E v e n t Q u e u e .com. E m p t y B o r d e r . / * * *L a u n c ht h ea p p l i c a t i o n . * / www. p r i n t S t a c k T r a c e ( ) . i m p o r tj a v a . I m a g e O b s e r v e ro ) Problema 4 Crear una aplicación que muestre un archivo jpg dentro de un JFrame. i m p o r tj a v 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 m p o r tj a v a x . i m p o r tj a v a x . } } } ) .php?codigo=130&inicio=40 7/16 . s w i n g . i m p o r tj a v a . i m p o r tj a v a x . i n tw i d t h . J F r a m e . s e t V i s i b l e ( t r u e ) .16/04/13 Clase Graphics y sus métodos -d r a w I m a g e( I m a g ei .

0 ) ) . I m a g ei m a g e n=t . g e t D e f a u l t T o o l k i t( ) .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 ) . d r a w I m a g e( i m a g e n . j p g " ) . la fila y la referencia al JFrame donde debe dibujarse: g .0 . 6 0 0 ) . j p g " ) . p a i n t ( g ) . E v e n t Q u e u e .i n th ) Las segunda forma permiten definir una zona rectangular de la ventana a la que aplicar el método.0 . g e t I m a g e( " i m a g e n 1 . c o n t e n t P a n e . G r a p h i c s . la columna. www.1 0 0 . d r a w I m a g e( i m a g e n . 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 .t h i s ) . 8 0 0 . a w t .5 ) ) . s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 .php?codigo=130&inicio=40 8/16 . g e t I m a g e( " i m a g e n 1 . } 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 . E X I T _ O N _ C L O S E ) .com. i m p o r tj a v a .javaya. 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 . g e t D e f a u l t T o o l k i t( ) . a w t . a w t . i m p o r tj a v a .5 .i n tw . Por último llamamos al método drawImage con la referencia al objeto de tipo Image. Creamos un objeto de la clase Image llamando al método getImage de la clase Toolkit pasando como parámetro el archivo con la imagen: I m a g ei m a g e n=t .4 5 0 .0 .ar/detalleconcepto. El método repaint() puede ser: r e p a i n t ( ) r e p a i n t ( i n tx .i n ty . s e t B o u n d s ( 0 . i m p o r tj a v a . } } Creamos un objeto de la clase Toolkit llamando al método estático de la misma clase: T o o l k i tt=T o o l k i t . T o o l k i tt=T o o l k i t . g . El método repaint() llama ?lo antes posible? al método paint() del componente. C o l o r .3 0 0 ) .5 . s e t B o u n d s ( 1 0 0 . Método repaint() Este es el método que con más frecuencia es llamado por el programador.t h i s ) .16/04/13 Clase Graphics y sus métodos 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 . Problema 5 Crear una aplicación que muestre un círculo en medio de la pantalla y mediante dos botones permitir que se desplace a izquierda o derecha.

r e p a i n t ( ) . A c t i o n E v e n t . s e t B o u n d s ( 1 0 5 .javaya. 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 .16/04/13 Clase Graphics y sus métodos i m p o r tj a v a x .4 8 2 . 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 ) .8 9 .php?codigo=130&inicio=40 9/16 .2 3 ) .ar/detalleconcepto. c o n t e n t P a n e=n e wJ P a n e l ( ) . 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 . b d . i m p o r tj a v a .5 ) ) . i m p o r tj a v a . e v e n t . e v e n t . } } ) . } / * * *C r e a t et h ef r a m e . b i . s w i n g . c o n t e n t P a n e . b d . i m p o r tj a v a x . s e t V i s i b l e ( t r u e ) . s w i n g . a w t . a w t . c o n t e n t P a n e . } } ) . s e t B o u n d s ( 1 0 0 . f r a m e . s e t B o r d e r ( n e wE m p t y B o r d e r ( 5 . * / 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 . s e t B o u n d s ( 5 5 6 . i m p o r tj a v a x . b o r d e r . }c a t c h( E x c e p t i o ne ){ e . a d d ( b d ) . r e p a i n t ( ) .3 0 0 ) . * / p r i v a t ei n tc o l u m n a . A c t i o n L i s t e n e r . c o n t e n t P a n e . a d d ( b i ) . J B u t t o n . p r i n t S t a c k T r a c e ( ) . } } } ) . J B u t t o nb d=n e wJ B u t t o n ( " D e r e c h a " ) . E X I T _ O N _ C L O S E ) . 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 . s e t L a y o u t ( n u l l ) . c o n t e n t P a n e . b i .5 .5 . E m p t y B o r d e r .com.8 9 .4 5 0 . 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 ( ) .2 3 ) .1 0 0 . J P a n e l . s w i n g . / * * *L a u n c ht h ea p p l i c a t i o n . i m p o r tj a v a x . s w i n g . 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 " ) . J F r a m e . 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 . www.4 8 2 .

Cuando se presiona el botón (bi) restamos 10 al atributo columna y pedimos que se ejecute el método paint (esto último llamando al método repaint()).php?codigo=130&inicio=40 10/16 .3 0 0 . 6 0 0 ) . Debe aparecer y poder seleccionarse los márgenes superior e inferior de la página. } } Definimos un atributo columna: p r i v a t ei n tc o l u m n a . s e t C o l o r( C o l o 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 . } Problema 6 Se debe desarrollar una pantalla para configurar ciertas características de un procesador de texto. Cuando se presiona el botón inicializar la configuración de márgenes se inicializan con 0 y se selecciona orientación horizontal. g . Desplazar las líneas a medida que modificamos los márgenes. g . 0 . } } ) .16/04/13 Clase Graphics y sus métodos } s e t B o u n d s ( 0 . Los márgenes pueden ir en el rango de 0 a 10.1 0 0 . r e d ) . Cuando está seleccionado en el JComboBox el String Horizontal dibujar un rectángulo con base mayor a la altura. el método repaint borra todo lo dibujado dentro del JFrame y llama al paint: b i . 8 0 0 . Por otro lado tenemos la orientación de página.javaya. La misma se administra a través de un JComboBox que tiene dos valores posibles (Horizontal y Vertical).1 0 0 ) . f i l l O v a l( c o l u m n a . g . El método paint dibuja un círculo utilizando como posición 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 .3 0 0 . s e t C o l o r( C o l o r . g . y cuando está seleccionado el String Vertical dibujar un rectángulo con una base menor.com. c o l u m n a = 4 0 0 . r e p a i n t ( ) . p a i n t ( g ) .1 0 0 . f i l l O v a l( c o l u m n a . 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 .ar/detalleconcepto. r e d ) . p a i n t ( g ) .1 0 0 ) . www.

i m p o r tj a v a x . i m p o r tj a v a x . disponemos 4 objetos de la clase JLabel. D e f a u l t C o m b o B o x M o d e l . dos JSpinner. C h a n g e L i s t e n e r . J C o m b o B o x . e v e n t . s w i n g . e v e n t . i m p o r tj a v a x . G r a p h i c s . C h a n g e E v e n t . i m p o r tj a v a x . a w t . i m p o r tj a v a . s w i n g .javaya. i m p o r tj a v a .com. I t e m E v e n t . un JButton y un objeto de la clase JComboBox. a w t . J S p i n n e r .16/04/13 Clase Graphics y sus métodos Para implementar esta aplicación con el WindowBuilder creamos la interfaz visual. i m p o r tj a v a x . i m p o r tj a v a . E m p t y B o r d e r . www. s w i n g . s w i n g . A c t i o n E v e n t . e v e n t . i m p o r tj a v a x . El dibulo de la hoja con las líneas de márgenes superior e inferior como el gráfico de orientación de la hoja se hacen en el método paint. 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 . a w t . i m p o r tj a v a x . s w i n g . a w t . i m p o r tj a v a . e v e n t .php?codigo=130&inicio=40 11/16 .ar/detalleconcepto. / * * *L a u n c ht h ea p p l i c a t i o n . a w t . I t e m L i s t e n e r . i m p o r tj a v a x . J L a b e l . e v e n t . i m p o r tj a v a x . s w i n g . a w t . s w i n g . E v e n t Q u e u e . p r i v a t eJ C o m b o B o xc o m b o B o x . s w i n g . i m p o r tj a v a . b o r d e r . J P a n e l . p r i v a t eJ S p i n n e rs p 1 . 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 . i m p o r tj a v a x . s w i n g . A c t i o n L i s t e n e r . El código fuente que resuelve esta aplicación es: i m p o r tj a v a . J F r a m e . e v e n t . J B u t t o n . a w t . s w i n g . s w i n g . p r i v a t eJ S p i n n e rs p 2 . i m p o r tj a v a . C o l o r .

} } ) . a d d ( l b l M a r g e n I n f e r i o r ) . c o n t e n t P a n e=n e wJ P a n e l ( ) . 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 . f r a m e .com. 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 ( ) . s e t B o u n d s ( 1 6 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 ( ) . } / * * *C r e a t et h ef r a m e .javaya. s p 1=n e wJ S p i n n e r ( ) .5 1 . a d d ( s p 1 ) .1 4 ) . s p 1 .2 6 .php?codigo=130&inicio=40 12/16 . a d d ( l b l M a r g e n S u p e r i o r ) .5 ) ) . 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 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 " ) .5 5 . l b l M a r g e n I n f e r i o r . c o n t e n t P a n e . 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 ( ) .5 .1 2 7 .1 0 9 .2 8 ) . 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 ( ) . 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 " ) . c o n t e n t P a n e . s e t B o u n d s ( 1 6 2 . www.1 0 9 .0 . s e t B o u n d s ( 4 6 . s p 2 .0 . p r i n t S t a c k T r a c 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 7 3 .4 8 1 ) . c o n t e n t P a n e . } } } ) .1 ) ) .1 4 ) .5 . c o n t e n t P a n e .2 6 . l b l H o j a . * / 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 .1 4 ) . c o m b o B o x . s p 2=n e wJ S p i n n e r ( ) .2 8 ) . 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 . s e t B o u n d s ( 1 6 2 . J L a b e ll b l H o j a=n e wJ L a b e l ( " H o j a " ) . s e t B o u n d s ( 1 0 0 . s p 2 . E X I T _ O N _ C L O S E ) .16/04/13 Clase Graphics y sus métodos * / 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 . s e t L a y o u t ( n u l l ) .1 ) ) .1 0 . c o n t e n t P a n e .ar/detalleconcepto.5 5 . a d d ( s p 2 ) . 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 .1 0 0 . s p 1 . c o n t e n t P a n e . s e t B o u n d s ( 1 6 2 . s p 2 . c o m b o B o x=n e wJ C o m b o B o x ( ) . c o n t e n t P a n e . a d d ( l b l H o j a ) . 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 ) .1 5 0 .4 6 .1 0 . } } ) .

g e t V a l u e ( ) . 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 " ) . 1 0 0 . e l s e g . p a r s e I n t ( s p 2 .javaya. s e t B o u n d s ( 3 2 1 . s e t C o l o r ( C o l o r . t o S t r i n g ( ) ) ." V e r t i c a l c o m b o B o x . 1 0 0 . i n tm s = I n t e g e r . d r a w L i n e ( 3 0 .2 6 . s e t V a l u e ( 0 ) . g . 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 ( ) . 2 2 0 m i ) .1 9 6 . s e t B o u n d s ( 4 5 . a d d ( b t n I n i c i a l i z a r ) . 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 . c o n t e n t P a n e . 8 0 + m s ) . d r a w R e c t ( 3 2 0 . i f( d i r e c c i o n .16/04/13 Clase Graphics y sus métodos } } ) . r e p a i n t ( ) . s e t B o u n d s ( 3 2 1 . t o S t r i n g ( ) ) . " ) . c o m b o B o x . g . 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 " . b t n I n i c i a l i z a r . 1 3 0 . 2 0 0 ) . d r a w R e c t ( 3 2 0 . s p 2 . } } ) . 8 0 + m s .1 4 ) . i n tm i = I n t e g e r . 1 2 0 . g . g . 1 2 0 . c o n t e n t P a n e . } Explicación del código. s e t C o l o r ( C o l o r . b t n I n i c i a l i z a r . e q u a l s ( " H o r i z o n t a l " ) ) g . p a r s e I n t ( s p 1 . b l u e ) . 1 4 0 ) . s e t V a l u e ( 0 ) . p a i n t ( g ) . r e d ) . s p 2 . www. s e t S e l e c t e d I n d e x ( 0 ) .2 3 ) . g e t V a l u e ( ) .5 5 . 2 2 0 m i . c o n t e n t P a n e .2 0 3 . 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 . 8 0 . 2 0 0 . Para el evento stateChanged de los controles JSpinner se debe llamar al método repaint() para que se grafique nuevamente las líneas de márgenes: s p 1 . } } ) . 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 .php?codigo=130&inicio=40 13/16 . a d d ( l b l H o r i e n t a c i n D e P g i n a ) . } } 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 .2 0 ) . g . a d d ( c o m b o B o x ) . l b l H o r i e n t a c i n D e P g i n a . g e t S e l e c t e d I t e m ( ) . d r a w R e c t ( 3 0 .ar/detalleconcepto.com. } } ) .1 6 5 .2 4 7 . c o m b o B o x . 1 3 0 . d r a w L i n e ( 3 0 . 1 0 0 ) . 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 ( ) .

c o m b o B o x . Disponer un JSpinner para poder seleccionarse los valores 0. 2 0 0 ) . Por otro lado debemos poder seleccionar cual de los dos botones del mouse será el principal. Confeccionar un programa que permita configurar las características del mouse. Problemas propuestos 1. 1 2 0 .ar/detalleconcepto. Por último cuando se presiona el botón 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 . La segunda línea le restamos el valor del JSpinner: g . 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 . r e d ) . t o S t r i n g ( ) ) . b l u e ) . 8 0 + m s ) .75 y 100. d r a w L i n e ( 3 0 .50. s e t C o l o r ( C o l o r . 8 0 + m s . 1 4 0 ) . 1 2 0 . e l s e g . Para saber la orientación 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 .16/04/13 Clase Graphics y sus métodos En el método paint dibujamos primero un rectángulo de color azul que representa la hoja: g . tenemos para esta función un JComboBox con dos opciones: izquierdo o derecho. g e t S e l e c t e d I t e m ( ) . 8 0 . 2 0 0 . 1 3 0 . i f( d i r e c c i o n . p a r s e I n t ( s p 2 . 1 3 0 . e q u a l s ( " H o r i z o n t a l " ) ) g . Activamos el color rojo y dibujamos las dos líneas.php?codigo=130&inicio=40 14/16 .com. s e t S e l e c t e d I n d e x ( 0 ) . g e t V a l u e ( ) . d r a w R e c t ( 3 2 0 . d r a w L i n e ( 3 0 . la superior coincide con el comienzo del rectángulo (sumamos tantos pixeles en la fila como lo indica el primer JSpinner): g . Cuando se selecciona el botón (cambio en el JComboBox) actualizar el gráfico mostrando el botón del mouse seleccionado (graficar en el método paint el mouse en pantalla) www.25. g . g . r e p a i n t ( ) . } } ) . Por un lado debemos seleccionar la velocidad de desplazamiento de la flecha del mouse. 2 2 0 m i . d r a w R e c t ( 3 0 . d r a w R e c t ( 3 2 0 . s e t C o l o r ( C o l o r . 1 0 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 . s e t V a l u e ( 0 ) .javaya. p a r s e I n t ( s p 1 . g e t V a l u e ( ) . 1 0 0 ) . s e t V a l u e ( 0 ) . t o S t r i n g ( ) ) . i n tm i = I n t e g e r . s p 2 . 2 2 0 m i ) . 1 0 0 .

no se revisa) Para el sorteo generar un valor aleatorio entre 1 y 3. Luego de sortear fijar en cero cantidad de bultos. www. Si la cantidad de bultos supera a 5 se revisa siempre sus bultos (es decir que aparece un círculo rojo). (En caso de ser rojo se revisa su equipaje. Si se genera un 1 se revisa.16/04/13 Clase Graphics y sus métodos 2.php?codigo=130&inicio=40 15/16 . Validar que también este seleccionado un valor distinto a cero en bultos (los valores pueden ir de 0 a 10). Mostrar en el título del JFrame la cantidad de bultos revisados y no revisados hasta el momento. y por otro lado selecciona la cantidad de bultos (JSpinner). La persona selecciona si viene del Interior del país o del Exterior (a través de un JComboBox). en caso de ser verde. Luego presiona el botón sortear y aparece al lado de este botón un círculo rojo o verde.ar/detalleconcepto.javaya.com. si se genera un 2 o 3 no se revisa. En una aduana hay una máquina que sortea las personas cuyo equipaje serán revisados.

16/04/13 Clase Graphics y sus métodos Retornar www.com.ar/detalleconcepto.javaya.php?codigo=130&inicio=40 16/16 .