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 - Un poquito de actividad

41 - Un poquito de actividad

[editar]
Curso gratis creado por Jorge Bourdette. Extraido de: http://www.publispain.com/supertutoriales
30 de Noviembre de 1999
Ahora sí, pasemos a completar nuestro manejador de eventos:


public boolean handleEvent(Event e) {
if (e.id
Event.WINDOW_DESTROY) {
if (enApplet) dispose();
else System.exit(0);
}
if ( (e.target dp)||(e.target
cs)||(e.target
cl) ) ActualizaBoton();
if (e.target
ok) Activar();
}
return super.handleEvent(e);
}

Simplemente, si detectamos un evento sobre alguno de nuestros paneles actualizamos el texto del botón; y si se presiona dicho botón llamamos al método Activar que se supone que va a tomar los datos de la base de datos, indicarnos servicios disponibles, etc.

Algo importante a notar es que el simple hecho de mover el mouse sobre uno de los paneles ya llama a ActualizaBoton (se nota porque titila el texto, sobre todo en una máquina lenta). Además, si hacen click sobre el botón Hoy o Mañana sin mover el mouse, el texto del botón ok no se actualiza ya que el evento va dirigido al botón presionado y no al panel.

Una forma de filtrar sólo los eventos que nos interesan sería usar, por ejemplo:


if ((e.target=cs.listaPueblos) && (e.id
Event.LIST_SELECT)) ActualizaBoton();
que está dirigida a la lista y no al panel en general, y tiene en cuenta el tipo de evento.

Lamentablemente, listaPueblos es privada dentro de la clase SelecPueblo y por lo tanto dentro de cs. Pero es mejor así, porque declararla pública y leerla desde afuera sería bastante sucio (así como la leemos podríamos escribirla).

Hay varias formas de mejorar esto sin cometer la torpeza de declarar pública a listaPueblos. Una posibilidad es verificar, usando cs.getDescription(), si el texto cambió (y sólo en ese caso modificar el texto del botón).

Otra, es hacer que los objetos de la clase SelecPueblo pasen a sus padres cualquier evento sobre ellos, o mejor solamente la selección de un elemento de la lista; para eso basta agregar a la clase SelecPueblo:


public boolean handleEvent(Event e) {
if ((e.target
listaPueblos) && (e.id
Event.LIST_SELECT)) { e.target=this;
}
return super.handleEvent(e);
}

En resumen: si el evento en el panel es una selección de la lista (tanto con mouse como moviendo la selección con las flechas), cambio el target del evento para que indique el panel (y no la lista); si no, lo paso a la clase antecesora.

Lo mismo podemos hacer con handleEvent para la clase DiaPartida:


public boolean handleEvent (Event e) {
if (e.target
hoy) { elDia.setText(GetHoy());
e.target=this;
}
if (e.target
diasiguiente) { elDia.setText(GetManana());
e.target=this;
}
if (e.target
elDia) { e.target=this;
}
return super.handleEvent(e);
}

Esto no anda como esperaríamos! El campo de texto no se comporta muy bien...

Esto es porque el código dependiente de la plataforma procesa los eventos de mouse antes de llamar a handleEvent, pero procesa los de teclado después de llamar a handleEvent.

Lo que significa que, en el caso del campo de texto, handleEvent (y por lo tanto ActualizaBotón) se llama antes de modificar el texto!

Para corregir esto, deberíamos procesar nosotros las teclas presionadas (lo que podríamos aprovechar para verificar que se presiona una tecla válida).

Cuidado! En futuras versiones de Java podría implementarse el mismo comportamiento para el mouse, y por lo tanto tendríamos que repensar la estrategia.

Para colmo, sólo los eventos que la plataforma envía llegan a Java; por ejemplo, Motif no envía eventos de movimiento de mouse dentro de un campo de texto... lo que significa que nunca podríamos capturar ese tipo de eventos. Sólo el componente Canvas pasa todos los eventos.

Para simplificar, sólo actualizaremos el texto del botón cuando se presiona Enter (Event.key=10):


if ((e.target
elDia)&&(e.id
Event.KEY_PRESS)) {
if (e.key
10) e.target=this;
}

Ahora debemos modificar el método handleEvent en nuestra clase Ventana8 para que soporte todos estos eventos:


public boolean handleEvent(Event e) {
if (e.id
Event.WINDOW_DESTROY) {
if (enApplet) dispose();
else System.exit(0);
}
if ( ((e.target
dp)&&((e.id
Event.ACTION_EVENT)||(e.id
Event.KEY_PRESS)))
||((e.target
cs)&&(e.id
Event.LIST_SELECT)) ||((e.target
cl)&&(e.id
Event.LIST_SELECT)) )
ActualizaBoton();
if (e.target
ok)
Activar();
return super.handleEvent(e);
}

Obviamente, procesar todas las teclas nosotros sería bastante más complicado... de todos modos, el método en DiaPartida sería más o menos así:


if ((e.target elDia)&&(e.id
Event.KEY_PRESS)) {
1- leer el contenido del campo con: elDia.getText()
2- modificarlo de acuerdo a la tecla presionada: e.key
3- poner el resultado en el campo con: elDia.setText(texto)
4- modificar el objeto del evento al panel con: e.target=this;
5- enviar el evento al objeto padre (no la clase padre),
en este caso Ventana8, mediante: getParent().deliverEvent(e)
6- evitar proceso posterior del evento mediante: result(true)
}

Me ahorro explicar estos dos últimos pasos; se complica bastante todo porque hay que manejar la posición del cursor dentro del campo de texto, etcétera. Con lo que hicimos es bastante... creo!
[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.