Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
2/16
16/04/13
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
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:
16/04/13
} }
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
16/04/13
-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
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
16/04/13
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
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
* / 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
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
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
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
Retornar
www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
16/16