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

Para este ejercicio cree un Jframe con un

panel y varios botn con su respectivo


evento.
Todos los componentes poseen lo que se
denomina el contexto grafico. La forma de un
componente ya sea un botn, tabla,Jlist y
dems es definida por un dibujo que se hace
sobre dicho contexto grafico.
Es posible acceder al contexto grafico de los
componentes y dibujar sobre ellos lneas,
elipses, rectngulos y polgonos en general.
Para acceder al contexto grafico se usa el
mtodo getGraphics que poseen todos los
componentes.
Por ejemplo, si se quisiera dibujar sobre un
botn
Graphics g=Boton.getGraphics().
El objeto g es el contexto grafico del botn
llamado Boton. Cualquier accin de dibujo se
har sobre dicho componente.
Dibujar un rectangulo x,y
drawRect(x,y,ancho,alto)
alto

ancho
drawOval(x,y,ancho,alto)
x,y

Estos mtodos dibujan una alto


ancho
Figura si color de fondo.
X1,y1
drawLine(x1,x2,y1,y2)

X2,y2

setColor(Color): mtodo para establecer el


color con el que se dibujan las figuras. Antes
de dibujar una figura de un color deseado es
necesario establecer dicho color.
Ejemplo:g.setColor(Color.RED)
fillRect(x,y,ancho,alto): mtodo para dibujar
un rectngulo lleno de un color.
fillOval(x,y,ancho,alto): mtodo para
dibujar un ovalo relleno de un color.

Para establecer el color de relleno antes de


dibujar la figura se debe establecer dicho
color con setColor.
Supngase un 1
JPanel como
2
lienzo de
dibujo.
3
Coloque este
fragmento de
cdigo en el 4
evento de un
botn.
5
1. se extrae el contexto grafico del panel. Las coordenadas de
las figuras son relativas a este panel.
2. se dibuja un rectngulo sin relleno y con color de lnea
negro( no se ha puesto color)
3. Se coloca el color en rojo y se dibuja un ovalo sin relleno
4. Se coloca el color en verde y se dibuja un rectngulo
relleno.
5. Se coloca el color en azul y se dibuja un ovalo relleno.
Luego en la misma coordenada(x,y) y con el mismo
tamao(ancho,alto) se cambia el color a rojo y se dibuja un
ovalo sin relleno. Esta es la manera de dibujar una figura
con borde de un color y relleno de otro. El ovalo rojo sin
relleno queda encima del azul lleno.
Que pasa si minimizo y maximizo la ventana?
Esto es debido a que los dibujos no se
almacenan en el componente.
Todos los componentes tienen un mtodo
llamado paint donde se define grficamente
como lucen al usuario. Solo el cdigo de dibujo
que se haga all persiste en el tiempo. Este
mtodo se llama cada vez que la ventana
cambie, ya sea por moverse o esconderse, y
como en dicho metodo no esta el cdigo que
hizo el dibujo, este no se hace.
En el Jframe defina el metodo paint.
public void paint(Graphics g) {
super. paint(g);

//.aqu va el cdigo de dibujo


}

Este metodo recibe como parmetro el graphics del Jframe.


Si se dibujara sobre el Jframe, este seria el graphics a usar.
Traslade el cdigo que puso en el botn aqu despus del
super y vea que pasa cuando minimiza y maximiza.
Entonces si los dibujos que se hagan fuera del
paint no persisten en el tiempo, como hacer
que esto ocurra?.
La respuesta a esto es usar la clase
BufferedImage. Esta clase provee un Graphics
Virtual el cual luego se puede dibujar en el
graphics del componente en cuestin en el
mtodo paint.
A continuacin se muestra como crear un
BufferedImage. El constructor de esta clase
recibe como parmetro el tamao y el tipo de
color que manejara. Declarar el objeto

Se instancia y se le asigna el tamao del


panel donde se estn haciendo los
dibujos. Adems del tipo de color.

BufferedImage.Type_INT_RGB indica que


se los dibujos y las imgenes sern en
colores RGB. Tambin podra configurarse
para imgenes en blanco y negro.
1
2
3
1. Graphics2D es una clase muy similar a Graphics,
posee los mismos mtodos explicados de Graphics
adems de otros. El mtodo getGraphics del
BufferedImage retorna un Graphics al que hay que
realizarle un casting.
2. El BufferedImage por defecto posee un fondo negro,
hay que establecer el fondo a blanco(o cualquier
color deseado) a traves del metodo setBackGround.
3. clearRect(x,y,ancho,alto) establece el rea que
tendr el color de fondo. En nuestro caso dicha rea
empieza en 0,0 y tiene el mismo tamao del panel
donde se colocara el BufferedImage.
Como se dijo anteriormente, el
BufferedImage es un Graphics Virtual. Hay
que asignarlo a un componente. Para que los
dibujos hechos persistan esto se debe hacer
en el paint.
En el paint extraemos el graphics del
componente, que en este caso es el JPanel y
en el dibujamos el BufferedImage usando el
mtodo drawImage. Este mtodo recibe
como parmetro, la imagen(BufferedImage),
la posicin (x,y) donde se dibujara, el
tamao(ancho,alto) que en nuestro caso ser
el mismo del panel donde se pondr el
BufferedImage y un objeto(que en nuestro
caso ser null).
Para dibujar sobre el BufferedImage primero se obtiene el
Graphics y a continuacin se usan los mtodo de dibujo
explicados anteriormente. Despus de dibujar hay que
refrescar el dibujo llamando al mtodo repaint. Si no se hace
esto el dibujo no se vera. Este repaint llama implcitamente
al Paint donde se dibuja el BufferedImage con el cambio
hecho.
En un botn dibuje un circulo de relleno rojo.
Obtener
Los dibujos se Graphics del
hacen sobre BufferedImage
este Graphics
Por defecto la lnea que usa el Graphics es de
ancho 1 y continua. Es posible crear lnea de
mas grosor y con patrones distintos como
punteada, lineada, puntos combinada con
lnea. Consulte el BasicStroke para crear este
tipo de lineas
Este punto(0.0) es el
origen del sistema
coordenado en el
Graphics.

En esta direccin
incrementa Y

En esta direccin
incrementa X
Crear una grafica a partir de dos vectores,
uno X y otro con Y. estos vectores pueden ser
el producto de la tabulacin de una funcin.
El sistema coordenado cartesiano es muy
distinto al sistema coordenado del graphics.

origen Y Incrementa
en esta
origen En esta direccin
direccin
incrementa
Y

En esta direccin X Incrementa en


incrementa X esta direccin
En el sistema del Graphics la Y aumenta hacia
abajo y en el cartesiano aumenta hacia arriba.
Adems los orgenes estn ubicados en sitios
distintos.
Hay que encontrar una relacin de conversin
entre una coordenada cartesiana y su
correspondiente coordenada en el graphics.
cartesiano Graphics
YMaX 0

XMin XMaX 0 Ancho

YMin alto
Se debe establecer una ecuacin que me
permita determinar la ubicacin en el
graphics de un punto (x,y) cartesiano.

En un panel de -10 0

500x400 la (-3,4) (40,60)

Coord (3,4) -5 -5 0 500


Queda ubicada en
El punto 40,60
-10 400
Por ejemplo, si en un panel de 400 de alto por
500 de ancho se desea crear una grafica
desde en x=-5 hasta 5 e y=-10 hasta 10, se
tiene que xmin=-5, xmax=5, ymin=-
10,ymax=10.
Esta tabla muestra Cartesiano Graphics
X=-5 X=0
La correspondencia entre X=5 X=ancho
Un punto cartesiano y uno Y=-10 Y=0
Y=-10 Y=alto
En el Graphics
Se deben definir dos funciones:
1. Xgraph=f(xCar,anchopanel)
2. Ygraph=f(yCar,altopanel)
X en el graphics depende o es funcin del X
cartesiano y el ancho del panel
Y en el graphics depende o es funcin del Y
cartesiano y el alto del panel.
Usando la ecuacin de una linea recta y-y1=m(x-x1) y m=(y2-y1)/(x2-x1)
suponiendo que x1=Xmax,x2=Xmin,y1=anchopanel e y2=0

Y equivale a xgraph que es la variable dependiente de la variable dependiente


xcartesiano.
Usando la ecuacin de una linea recta y-y1=m(x-x1) y m=(y2-y1)/(x2-x1)
suponiendo que x1=Ymax,x2=Ymin,y1=altopanel e y2=0

Y equivale a ygraph que es la variable dependiente de la variable dependiente


ycartesiano.