Article View: es.comp.lenguajes.java
Article #29206Re: Pintar desde fuera del metodo Paint
From: Chano G�mez
Date: Tue, 27 Jan 1998 00:00
Date: Tue, 27 Jan 1998 00:00
38 lines
2770 bytes
2770 bytes
> Mi principal problema es que mi simulacion no pinta hasta que la pantalla no
> se ha modificado, con lo que el usuario, si no lo sabe, se puede pasar horas
> pulsando el boton empezar sin que pase nada. Si la pantalla no se ha
> modificado las sentencias se ejecutan pero no modifican nada.
>
> Para solucionarlo, la llamada a la funcion la hago desde el codigo del metodo
> Paint, llamo a la simulacion con un parametro, el contexto grafico que recogo
> de Paint, y como la simulacion dura varios minutos, el metodo Paint no
> devuelve el control y los botones estan inactivos.
No debes ejecutar el cuerpo principal del programa desde el m�todo paint(). El
m�todo paint() solo debe ejecutarse en dos casos:
* cuando el sistema determina que debe actualizarse la pantalla.
* cuando t� le dices al sistema que debe actualizarse la pantalla, porque
algo ha cambiado en la simulaci�n. En ese caso, debes llamar al m�todo repaint().
Este m�todo hace que el sistema llame a paint() con el contexto gr�fico adecuado.
Yo te sugiero que hagas lo siguiente:
* cuando el usuario pulse en el bot�n de "arranque" del programa, crea un
thread encargado de realizar la simulaci�n. Cada vez que el thread determine que
es necesario refrescar la imagen, haz que llame al m�todo repaint() del applet.
�C�mo sabe paint() lo que debe pintar? Hay dos m�todos.
* el estado de la simulaci�n est� almacenado en una serie de variables que el
m�todo paint() puede leer para redibujar todo. En este caso, cada llamada a
paint() consumir� bastante CPU, dependiendo de lo complicado de la imagen.
* el thread que hace la simulaci�n tiene una imagen oculta sobre la que hace
todos los dibujos y actualizaciones. Cada vez que se ejecuta paint(), coges esta
imagen oculta y la vuelcas en pantalla. De esa forma, el m�todo paint() consta de
una �nica l�nea: la llamada a Graphics.drawImage(). Este es el m�todo de "doble
buffer" del que hablaba Jorge Baez en su mensaje anterior. Creo que es el m�s
recomendable, pero todo depende del programa, lo r�pida que sea la simulaci�n,
etc.
Un saludo.
Chano.
Technical Details
Message-ID:
<34CE5603.A29BD644@ran.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<34C88CEC.C1CE4E42@madnetro.com> <6ai9ce$k2v$1@eubuf21.eu.concert.net> <34CDA7D7.8BF2848D@lettera.skios.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,25919fe04c94ccf4 X-Google-Attributes: gid1116f3,public From: "Chano G�mez" <chano@ran.es> Subject: Re: Pintar desde fuera del metodo Paint Date: 1998/01/27 Message-ID: <34CE5603.A29BD644@ran.es> X-Deja-AN: 319804145 Content-Transfer-Encoding: 8bit References: <34C88CEC.C1CE4E42@madnetro.com> <6ai9ce$k2v$1@eubuf21.eu.concert.net> <34CDA7D7.8BF2848D@lettera.skios.es> Content-Type: text/plain; charset=iso-8859-1 Organization: Unisource Espana NEWS SERVER Mime-Version: 1.0 Newsgroups: es.comp.lenguajes.java