20.01.2015 Views

CAPITULO 12: DIBUJADO Los mecanismos de pintado de Java ...

CAPITULO 12: DIBUJADO Los mecanismos de pintado de Java ...

CAPITULO 12: DIBUJADO Los mecanismos de pintado de Java ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

el ratón. En el mundo real los programadores necesitan rastrear diferentes eventos como<br />

lo son: eventos<br />

<strong>de</strong> acción, eventos <strong>de</strong> ajuste, eventos <strong>de</strong> teclado, eventos <strong>de</strong> enfoque, eventos <strong>de</strong> mouse<br />

entre otros.<br />

Consi<strong>de</strong>re que pasaría si un gran número <strong>de</strong> eventos <strong>de</strong> diferente tipo fueran generadas<br />

en una rápida<br />

sucesión. ( Esto no es inusual, moviendo o arrastrando el ratón se pue<strong>de</strong>n crear un gran<br />

número <strong>de</strong><br />

eventos en un corto lapso). De tiempo en tiempo un evento pue<strong>de</strong> ser generado, los<br />

manejadores <strong>de</strong><br />

eventos pue<strong>de</strong>n modificar variables instanciadas y el método paint() pue<strong>de</strong> modificar la<br />

pantalla por<br />

medio <strong>de</strong> un ciclo repetitivo.<br />

Sería i<strong>de</strong>al si el manejador <strong>de</strong> eventos pudiera simplemente, modificar las variables<br />

instanciadas y correr<br />

método paint () periodicamente.<br />

El método repaint() calendariza una llamada al método update(). Esto significa que una<br />

ban<strong>de</strong>ra es<br />

activada por en el hilo GUI. Cada 100 millisegundos (en la mayoría <strong>de</strong> plataformas), el<br />

hilo GUI<br />

chequea la ban<strong>de</strong>ra. Si ha sido activada, el hilo hace un llamado al método update() y<br />

<strong>de</strong>sactiva la<br />

ban<strong>de</strong>ra. Asi se hagan muchas peticiones durante el período <strong>de</strong> 100 milisegundos, solo<br />

se hace una<br />

llamada al método update().<br />

El código <strong>de</strong> ejemplo pue<strong>de</strong> ser modificado por ultima vez y se vería <strong>de</strong> la siguiente<br />

manera:<br />

1. public void mousedicked( MouseEvent e ) {<br />

2. m_mouseX = e.getX();<br />

3. m_mouseY = e.getY();<br />

4. repaint();<br />

5. }<br />

6. public void paint( Graphics g ) {<br />

7. g.setColor( Color.red );<br />

8. g.fillOval( m_mouseX-10, m_mouseY-10, 20, 20 );<br />

9. }<br />

La llamada al método repaint() en la linea 4, reemplaza la llamada al método<br />

getGraphics() y la llamada<br />

al método update().<br />

El código anterior muestra el enfoque preferido para manejar eventos que hacen que la<br />

pantalla se<br />

cargue: los manejadores <strong>de</strong> eventos almacenan información en variables y llaman al<br />

método repaint() y<br />

el método paint() dibuja en la pantalla <strong>de</strong> acuerdo con la información <strong>de</strong> las variables.<br />

<strong>Los</strong> dos<br />

beneficios <strong>de</strong> este enfoque son:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!