🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #29206

Re: Pintar desde fuera del metodo Paint

#29206
From: Chano G�mez
Date: Tue, 27 Jan 1998 00:00
38 lines
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-mail
References: <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