| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Oscar18457
Registrado: 22 Ago 2007 Mensajes: 19 Ubicación: Chile
| Publicado: 08/11/2007 4:54 am | | | Título: Consulta sobre metodo public void paint(Graphics g) |
| Buenos días, estoy estudiando java y siempre descubro algo nuevo y aclaro algunas dudas y se presentan otras: se que en los applet, la función paint() es la más importante tenía entendido que era el punto de entrada al proceso del mismo.
Sin embargo pensaba que la definición es decir public void paint(Graphics g), era el punto de partida, no tenía en mente que la función debe ser llamada (jeje). De acuerdo a esto alguien puede explicarme porque en el programa anterior si cambio repaint() , por paint el compilador arroja un error de: si llamo paint(g) no encuentra el símbolo g, si la llamo como paint(), no encuentra el metodo paint().
Este es el código: import java.awt.*; import java.applet.*; import java.util.*;
public class MuestraHora extends Applet implements Runnable { Thread HiloDeHora=null; Font fuente = new Font("Serif",Font.BOLD,18); //clase Font, variable estatica BOLD FontMetrics fontMetrics; String FechaHora; Date FechaHoraActual; int x,y;
public void init() { y=getSize().height / 2; }
public void start() { if(HiloDeHora==null) { HiloDeHora = new Thread(this); HiloDeHora.start(); }
}
public void run() { while(true) { FechaHoraActual = new Date(); repaint(); //paint(g); //paint(); try { HiloDeHora.sleep(500); }
catch(InterruptedException e) {
}
} }
public void paint(Graphics g) { g.setFont(fuente); fontMetrics=g.getFontMetrics(); FechaHora = FechaHoraActual.toString(); x=(getSize().width - fontMetrics.stringWidth(FechaHora)) / 2; g.drawString(FechaHora,x,y);
}
}
Muchas gracias _________________ oa |
| | Volver arriba | |  | grandzam
Registrado: 10 Feb 2005 Mensajes: 151
| Publicado: 08/11/2007 9:48 pm | | | Título: |
| Hola, bueno pues, te marca error de que no puede encontrar paint() porque no esta definido dentro de la clase. Lo mismo con la g, no has definido que es g dentro del método run.
No es necesario que mandes llamar al método paint, incluso no creo que se pueda, hehe... porque es mandado llamar automáticamente y además Graphics es abstracta y no puedes hacer una instancia de ella por lo cuál a su vez no puedes definir g.
Si quitas el método repaint() el applet funcionará pero no se refrescara, es decir se quedará estático, y como verás eso significa que el método paint(Graphics g) es llamado automáticamente. Lo que hace repaint() como su nombre lo indica es estar llamando a paint para que se pinte otra cosa y asi se consigue que se refresque la pantalla. |
| | Volver arriba | |  | Oscar18457
Registrado: 22 Ago 2007 Mensajes: 19 Ubicación: Chile
| Publicado: 09/11/2007 4:37 am | | | Título: Consulta sobre metodo public void paint(Graphics g) (dos) |
| Grandzam, gracias por tu respuesta sin embargo explicame un poco más por favor. En el mismo applet esta redefinida la funcion paint(graphics), porque entonces no la ve. He visto que en otros applet usan la funcion Update(), para modificar a repaint() y dentro de ella si pueden llamar a paint. Se que es un tema de conocimiento puedes profundizar un poco más por favor . Gracias Oscar Avendaño _________________ oa |
| | Volver arriba | |  | | grandzam
Registrado: 10 Feb 2005 Mensajes: 151
| Publicado: 09/11/2007 8:31 am | | | Título: |
| No es que no vea el método sino que es por como lo mandas llamar, si mandas llamar paint(), el método paint() no esta definido, esta definido paint(Graphics g) que recibe un parámetro, entonces no es lo mismo, estamos hablando de métodos totalmente diferentes. Ahora bien, cuándo mandas llamar a paint(g); no encuentra la g, porque no la has definido dentro de ese método (variable local) o dentro de la clase (variable de clase).
El método update es una cuestión diferente ya que el método update se utiliza para pintar partes de la pantalla, no toda completa, no se si me entiendas (no es para modificar a repaint, incluso puedes mandar a llamar a repaint() dentro de update())... En este caso es diferente ya que como puedes ver update recibe un parámetro que es Grapics g, asi es que si podemos llamar a paint(g), tendríamos algo como esto:
| Código: | public void update(Graphics g) { paint(g); }
|
Así que como puedes ver a paint le mandamos la variable que nos mandan como parámetro es decir, g. en este caso si la reconoce porque dentro del método update si tenemos defindo que es g.
Acerca de lo que dices que porqué desde otro método no puedes mandar llamar a paint es por las razones que te mencione en el mensaje anterior, no puedes mandar llamar a paint(Graphics g) porque dentro del método run no has definido que es la g, además no puedes mandar la g porque Graphics es abstracta.
Tarea: estudiar métodos, paso de parámetros y clases abstractas. |
| | Volver arriba | |  | Oscar18457
Registrado: 22 Ago 2007 Mensajes: 19 Ubicación: Chile
| Publicado: 09/11/2007 11:02 am | | | Título: Consulta sobre metodo public void paint(Graphics g) |
| Grandzam, gracias por tu tiempo y respuesta, seguiré estudiando el tema, sin duda que Java es fascinante. Un abrazo y gracias otra vez _________________ oa |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |