Capitulos de este wiki
  1. 1 Java desde cero
  2. 2 Qué es Java
  3. 3 Lenguaje de Objetos
  4. 4 Independiente de la plataforma
  5. 5 Algunas características
  6. 6 El Java Development Kit
  7. 7 Empecemos de una vez!
  8. 8 Javascript
  9. 9 Al fin. Java!
  10. 11 Estructura de una clase
  11. 12 Estructura de clases
  12. 13 Declaración de la clase
  13. 14 El cuerpo de la clase
  14. 15 El cuerpo de los métodos
  15. 16 Declaración de variables locales
  16. 17 Asignaciones a variables
  17. 18 Operaciones matematicas
  18. 19 Llamadas a métodos
  19. 20 Las estructuras de control
  20. 21 If. [else]
  21. 22 Switch. Case.brake.default
  22. 23 While
  23. 24 Do. While
  24. 25 For
  25. 26 Break y continue
  26. 27 Otras...
  27. 28 Hagamos algo...
  28. 29 La clase Complejo
  29. 30 Algo sobre los métodos
  30. 31 Java a través de la ventana
  31. 32 Nuestra primera ventana
  32. 33 Un poco de detalle
  33. 34 Y los eventos...
  34. 35 Una ventana con vida
  35. 36 Viajando con Java
  36. 37 Preparando listas
  37. 38 Agregando fechas
  38. 39 Juntando todo hasta aquí
  39. 40 Completando la ventana
  40. 41 Un poquito de actividad
  41. 42 Y para terminar...
  42. 43 Finale con tutto
  43. 44 Un paréntesis de entrada/salida
  44. 45 Primera Lectura
  45. 46 Capturando excepciones
  46. 47 Los applets y los archivos
  47. 48 Nuestro modesto "Editor"
  48. 49 Volviendo al awt
  49. 50 Menú a la Java
  50. 51 Dialogos
  51. 52 Dibujava
  52. 53 Canvas en acción
  53. 54 El applet-container
  54. 55 Nuestro Canvas a medida
  55. 56 Dibujava ii
  56. 57 Vectores en acción
  57. 58 Flicker molesto!
  58. 59 Anímate!
  59. 60 Java en hebras
  60. 61 Los pasos basicos
  61. 62 Reunión de amigos
  62. 63 Creando Threads
  63. 64 Y los applets...?
  64. 65 La liebre y la tortuga (y el guepardo)
  65. 66 Sincronicemos los relojes
  66. 67 Mas sincronización
  67. 68 Multimedia!
  68. 69 Parametrizando un applet
  69. 70 Paseando por la red
  70. 71 Los Sockets
  71. 72 Un servidor atento
  72. 73 El cliente satisfecho

Java partiendo de Cero - Flicker molesto!

58 - Flicker molesto!

[editar]
Curso gratis creado por Jorge Bourdette. Extraido de: http://www.publispain.com/supertutoriales
30 de Noviembre de 1999
Bueno, el problema que nos queda es el molesto "flicker", o sea la manera en que titila el dibujo cuando movemos el mouse. Esto es porque cada vez que se llama a paint(), el fondo se borra y se redibuja todo el canvas.

Básicamente, la manera de evitarlo es reescribiendo el método update(), que es el que borra el fondo antes de llamar a paint() para que no lo borre; otro método (que es el que vamos a usar) es dibujar no sobre la pantalla sino sobre un "buffer" gráfico, y luego copiar ese buffer sobre la pantalla (lo que es mucho más eficiente que dibujar sobre la misma).

Para eso vamos a crear un par de objetos:

class miCanvas extends Canvas {
Vector v = new Vector();
Image imgBuff;
Graphics grafBuff;
.............................

Image es una clase abstracta, madre de todas las clases que representan imágenes gráficas. Graphics es también abstracta y nos permite obtener un contexto en el cual dibujar.

Lo que vamos a hacer es modificar nuestro método paint() para que simplemente llame a update(), y redefinir el método update():

public void paint(Graphics g) {
update(g);
}

El método update() es el que hará todo el trabajo y básicamente es como nuestro viejo paint() con algunos agregados:

public void update(Graphics g) {
int i;
Dimension d = size();

if (grafBuff
null) {
imgBuff = createImage(d.width, d.height);
grafBuff = imgBuff.getGraphics();
}
grafBuff.setColor(getBackground());
grafBuff.fillRect(0, 0, d.width, d.height);
grafBuff.setColor(Color.red);
grafBuff.drawRect(0, 0, d.width-1, d.height-1);
grafBuff.setColor(Color.blue);
if (v.size() > 0) for (i=0; i<v.size(); i++) {
Rectangle box = cortarRect((Rectangle)v.elementAt(i), d);
grafBuff.drawRect(box.x, box.y, box.width-1, box.height-1);
}
g.drawImage(imgBuff, 0, 0, this);
}

En negrita hemos indicado los agregados.

Si no está creado todavía (grafBuff
null), creamos nuestro buffer de dibujo. Para crear dicho buffer gráfico (de clase Graphics), primero creamos una imagen que en este caso tiene las mismas dimensiones que el canvas (d.width x d.height), y luego asignamos a grafBuff el contexto de dicha imagen mediante el método getGraphics(). Imagínense que con createImage(...) crean una "pantalla virtual", y getGraphics() nos da una forma de acceder a esa pantalla como si fuera real.
Utilizando dicho contexto, elegimos como color el mismo color de fondo del applet (getBackground()) y dibujamos un rectángulo lleno (fillRect(...)), borrando así cualquier cosa que hubiera estado dibujada.

En itálica hemos indicado las modificaciones a nuestro método anterior. Simplemente, en lugar de usar el contexto de la pantalla (el parámetro g del método), dibujamos sobre nuestro contexto-pantalla virtual.

Finalmente, y para poder visualizar nuestro dibujo, usamos el método drawImage sobre el contexto de la pantalla real (g), que copia nuestro contexto imgBuff en las coordenadas (0,0) sobre la pantalla. Se hace también referencia al canvas (...this): el cuarto parámetro de drawImage es un objeto de clase ImageObserver, una interface que sirve para que el objeto dentro del cual se dibuja reciba mensajes asincrónicos que le indican cómo está siendo construida la imagen, y cuándo está lista.
[editar]

84 opiniones

asdf

que quiers decir con Expresion Booleana?




1 2 3 4 5 6 7 ... 17 | siguiente >

Cursos gratis relacionados con 'Java partiendo de Cero'

Autor y licencia de 'Java partiendo de Cero'


Curso gratis de Jorge Bourdette. Extraido de: http://www.publispain.com/supertutoriales CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.