En Java disponemos de la clase Dialog para crear diálogos, es decir, ventanitas temporarias para entradas de usuario, que dependen de otra (de hecho la clase Dialog es heredera de la clase Window).
Si bien podemos crear diálogos a medida usando la clase Frame, se supone que usar diálogos debe ser más fácil. La realidad es que por ahora no se puede usar mucho más que los diálogos estándar (y el único que vale la pena es FileDialog), ya que las implementaciones actuales de Java tienen un problema: en algunas plataformas el programa que abre el diálogo sigue, en lugar de esperar que se cierre el diálogo y devuelva la respuesta.
Por eso hemos puesto solamente una indicación adonde debería haber un diálogo de confirmación:
if (editado) System.out.println("Pedir confirmación!\n");
En ese lugar deberíamos llamar por ejemplo a un diálogo que nos permita decidir por sí o por no:
if (editado) {
sino = new ConfirmarDlg(this,"Archivo modificado!");
if (sino.getResponse()
true) ....;
else ....;
}
o algo así. Esto mismo lo podemos hacer de otras maneras, por ejemplo usando threads y comunicaciones entre procesos, pero se complica mucho para esta altura del curso. Esperemos un poco más adelante, aunque Sun me prometió que en la versión 1.1 ya va a estar corregido (sale para fines del '96).
Por lo pronto, veamos un caso simple con la clase FileDialog:
FileDialog fd = new FileDialog(this,"Abrir...",FileDialog.LOAD);
fd.show();
nombreArchivo = fd.getFile();
Primero declaramos una variable de tipo FileDialog, y creamos la instancia con new. Como parámetros se pasa el padre (this, o sea "esta ventana"), el título de la ventanita de diálogo, y una constante LOAD o SAVE (son static, por lo que se denominan directamente con el nombre de la clase y no necesariamente de una instancia) que indica si el diálogo es para cargar o grabar un archivo (Obviamente la tarea en sí de cargar o grabar el archivo la tenenmos que hacer nosotros, el diálogo sólo espera que elijamos un nombre).
El método show() muestra el diálogo y espera que seleccionemos y presionemos Ok o Cancel. Aquí es donde fallan los demás diálogos ya que es programa sigue sin esperar.
Finalmente, el diálogo se cierra pero no se elimina el objeto (posiblemente está implementado usando el método hide(), que lo oculta de la vista pero no se pierde hasta no salir del método que lo creó, donde actuaría el recogedor de basura de la memoria). Esto hace que aunque no lo veamos podamos llamar al método getFile() sobre este objeto, que nos devuelve el nombre del archivo seleccionado (o null si se presionó Cancel).
Bueno, antes de meternos en otras bibliotecas, vamos a reservar una clase más (la próxima) para