HTMLpointHTMLpoint HTMLpoint.com


 Interfaces gráficas y sucesos



Por fin llegamos a la programación de interfaces gráficas, es decir, a la creacción de apliques y de aplicaciones a ventanas. En primer lugar, intentamos establecer qué es un interfaz y qué quiere decir hacerla gráfica.
Cada programa, como ya dijimos, se puede ver como un objeto que calcula una función, es decir, que coge unos datos del exterior y devuelve unos resultados. Por ejemplo, pensemos en un simple programa que calcula la suma de dos números. Este programa cogerá como input dos números y devolverá como output un solo número que representa la suma de los primeros dos.
Lo que acabamos de decir es válido en general para todas las aplicaciones y no es un caso específico del ejemplo anterior. Pensemos en un videojuego: el input lo dará la palanca de control, y el output sará la gráfica que aparece en la pantalla. Por esta razón, conceptualmente tanto el videojuego como el programa suma, como cualquier programa que un programador pueda inventarse, son funciones calculadas sobre unos datos de entrada que devuelven resultados.
La interfaz del programa hacia el usuario que la utiliza es la manera en que el programa coge los datos del usuario y le devuelve los resultados.

Hasta ahora vimos unas interfaces de texto, el caso de la suma de los números en las que los datos se cogían del input estándar con una System.in.read() y los resultados se imprimían en el output estándar con una System.out.print().
Las System.in y out representan una interfaz del programa hacia el exterior, en este caso, hacia el usuario.
Otras interfeces con el exterior que ya hemos analizado, son los archivos que representan interfeces de entrada o de salida hacia usuarios u otros programas.
Estableciendo una pequeña comparación, no tan imposible, entre un programa y el hombre, podemos decir que la interfaz en entrada del cerebro está representada por la vista, el tacto, el gusto, el oído y el olfato, mientras la interfaz de salida está representada por la palabra y el movimiento de los músculos.
Notar que esto no es algo muy raro porque los robots, aunque no tienen los mismos canales de entrada que los hombres (tienen la vista, una especie de tacto, algo que indica la proximidad) y de salida (a menudo hablan, en lugar de los músculos tienen motores eléctricos conectados a brazos mecánicos, pinzas, etc...), tienen el mismo funcionamiento del hombre. Realizan acciones (dan un ouput) consecuentemente a unos estímulos (señas de input), aunque por supuesto el hombre es mucho más complejo gracias a su capacidad de pensamiento que todavía la inteligencia artificial no consigue alcanzar totalmente. Realmente un robot no puede decidir nada al conocer sólo informaciones parciales sobre un problema, en cambio el hombre puede hacerlo porque es capaz de formular hipótesis, etc.…).

Por tanto, la interfaz está compuesta por todos los canales de los que un programa recoge informaciones y hacia las que devuelve unos resultados.
Algunos datos de entrada sirven para que cambie sólo el estado del programa, otros, en cambio, dan inmediatamente un output. Nosotros los consideramos todos datos en los que se calculan funciones. Realmente una función se calcula también teniendo en cuenta el estado del programa y, también, el estado y, por consiguiente, el input que le ha cusado es un input de la función.
Aclaro este tema con un ejemplo. Pensemos en un programa que calcula dos funciones, una de suma y otra de sustracción entre dos números, y pensemos en un input que toma un número para elegir un estado (1 o 2), y después dos números. A estos dos números se les aplica la función suma o la función sustracción según el estado del programa.

Poe ejemplo:

INPUT: <1,10,10> à OUTPUT: 20
INPUT:<2,10,10> à OUTPUT: 0


En el ejemplo, el input sobre el estado se usa para calcular el output.

Lo que nos interesa es la interfaz del usuario. Vimos como los programas pueden relaccionarse con otros programas o con periféricas (enviando, por ejemplo, órdenes a una impresora), pero esto no nos interesa. Nos interesa en cambio ver todo lo que le sirve al programa para dialogar con el usuario, es decir, la llamada interfaz del usuario.
En este caso nos interesa ver la interfaz gráfica del programa, es decir, la interfaz que hace mucho más agradable el programa al usuario, en lugar de la gris interfaz de caracteres que vimos antes.
La interfaz gráfica del programa está compuesta por los llamados componentes GUI (Graphics User Interface), que son componentes que sirven para el input o el output y tienen un aspecto gráfico. Son, por ejemplo, unos componentes GUI de un programa, todos los menús, los pulsadores, las etiquetas, etc….
Todas estas GUI estrán, obviamente, conectadas a una estructura que las incluye. Las dos estructuras que analizaremos, ya que son las más importantes, son los apliques y las ventanas.

Cada GUI es, entonces, un trocito de interfaz gráfica, reciben los sucesos y, de acuerdo con éstos, dan unos resultados. Pensemos en un pulsador: se puede clicar o dejar de clicar. Cuando un usuario programa una interfaz gráfica que incluye un pulsador tendrá que gestionar incluso los sucesos asociados a éste, es decir, tendrá que decir qué ocurre cuando se clica el pulsador, cuando se deja de clicar, cuando le pasamos el ratón encima, etc.
Cada GUI tendrá un tipo de suceso asociado, algunos los gestionan automáticamente las clases que se amplian para incluir el GUI en la ventana (por ejemplo, la modificación gráfica del pulsador clicado que se pone en evidencia); otros los puede definir el usuario (como el clic de un pulsador, si no hay gestor no ocurre nada) y otros los tiene que definir el usuario (como todos los sucesos del teclado cuando queremos escuchar por lo menos uno de éstos, por ejemplo, nos interesa programar cómo se pulsa una tecla, tenemos que gestionar incluso la presión, etc.…).
Cada tipo de suceso, para cada tipo de componente GUI, tiene que ser declarado como escucha del suceso. Es un programa que espera que el suceso ocurra sobre el componente y cuando esto ocurre, lo gestiona.
La programación de interfaces gráficas es, por esta razón, diferente de la normal programación porque se dibujan las interfaces y luego se gestionan los suceos que llegan, mientras que en las normales aplicaciones había un main que representaba todo el programa. La gestión de los sucesos en Java ha cambiado de la versión 1 a Java 2 (JDK 1.2 para arriba). Nosostros analizaremos la nueva gestión de los sucesos, la de Java 2 porque la primera fue cambiada porque no se entendía a que componente se asocia el suceso.

En nuestra explicación de los componentes GUI analizaremos cómo definirlos, cómo inicializarlos, cómo introducirlos en una ventana o en un aplique y, finalmente, cómo gestionar los sucesos.
Como ya dijimos, Java 2 tiene dos colecciones de paquetes para las interfaces gráficas, java.awt, que ya existía en Java 1, y javax.swing, que salió con Java 2, construida sobre las AWT, que aumenta muchísimo las posibilidades para las interfaces gráficas.


  Volver al inicio de la página