Para aprender un poquito más sobre la biblioteca gráfica (AWT), vamos a modificar nuestro último programa para usar menús.
Vamos a volver a poner todo el código (que ampliamos para usar como applet o aplicación local) marcando las diferencias más notables:
/*
Archivo: Ejemplo14.java
*/
import java.io.*;
import java.awt.*;
import java.applet.*;
public class Ejemplo14 extends Applet {
public void init() {
new Ventana14(true); con "true" avisamos que es applet
}
public static void main(String args[]) { para usarlo como aplicación
Ventana14 v14 = new Ventana14(false); con "false" avisamos que no es applet
}
}
/*
Esta clase es la que en realidad hace el trabajo
*/
class Ventana14 extends Frame {
TextArea contenido;
boolean enApplet; para indicar si lo llamamos como applet
String nombreArchivo; para guardar el nombre del archivo abierto
MenuItem mArchivoAbrir; ACA ESTAN LOS ITEMS DE LOS MENUS
MenuItem mArchivoGrabar; .
MenuItem mArchivoSalir; .
MenuItem mEditCortar; .
MenuItem mEditCopiar; .
MenuItem mEditPegar; .
MenuItem mEditTodo; v
String clipboard; buffer para cortar y pegar
boolean editado = false; acá indicamos si modificamos el archivo
Ventana14(boolean enApp) {
super("Ejemplo de E/S");
enApplet = enApp; recordamos si es applet o no
Menu menuArchivo = new Menu("&Archivo"); CREAMOS LOS MENUS!!!
mArchivoAbrir = new MenuItem("&Abrir...");
mArchivoGrabar = new MenuItem("&Grabar...");
mArchivoSalir = new MenuItem("&Salir");
menuArchivo.add(mArchivoAbrir);
menuArchivo.add(mArchivoGrabar);
menuArchivo.add(new MenuItem("-"));
menuArchivo.add(mArchivoSalir);
Menu menuEdit = new Menu("&Edit");
mEditCortar = new MenuItem("Cor&tar");
mEditCopiar = new MenuItem("&Copiar");
mEditPegar = new MenuItem("&Pegar");
mEditTodo = new MenuItem("&Seleccionar todo");
menuEdit.add(mEditCortar);
menuEdit.add(mEditCopiar);
menuEdit.add(mEditPegar);
menuEdit.add(new MenuItem("-"));
menuEdit.add(mEditTodo);
MenuBar barraMenu = new MenuBar();
barraMenu.add(menuArchivo);
barraMenu.add(menuEdit);
setMenuBar(barraMenu);
contenido = new TextArea(); solo pongo una ventana de texto
add("Center",contenido);
pack();
show();
clipboard = new String();** // clipboard vacío,
** mEditPegar.disable();** // nada para pegar,
** mArchivoGrabar.disable();** // nada para grabar
}
public boolean handleEvent(Event e) {
if ((e.id==Event.WINDOW_DESTROY)||(**e.target==mArchivoSalir**)) {
**if (editado) System.out.println("Pedir confirmación!\n");** // debería confirmar
// si se quiere ir sin grabar!
if (enApplet) dispose();
else System.exit(0);
}
** if (e.target==mArchivoAbrir) CargarArchivo();** // acá proceso selecciones
** if (e.target==mArchivoGrabar) GrabarArchivo();** // de menú
** if (e.target==mEditCortar) {
clipboard = contenido.getSelectedText();
mEditPegar.enable();
contenido.replaceText(,contenido.getSelectionStart(),contenido.getSelectionEnd());
editado=true;
}
if (e.targetmEditCopiar) {
clipboard = contenido.getSelectedText();
mEditPegar.enable();
}
if (e.target
mEditPegar) {
contenido.replaceText(,contenido.getSelectionStart(),contenido.getSelectionEnd());
contenido.insertText(clipboard,contenido.getSelectionStart());
editado=true;
}
if (e.target==mEditTodo) contenido.selectAll();
if ((e.id==Event.KEY_PRESS)&&(e.target==contenido)) editado=true;
mArchivoGrabar.enable(editado);
** return super.handleEvent(e);
}
void CargarArchivo() {
FileInputStream fptr;
DataInputStream f;
** String linea = null;
if (editado) System.out.println("Pedir confirmación!\n");
** **FileDialog fd = new FileDialog(this,"Abrir...",FileDialog.LOAD);** // elijo archivo
** fd.show();** // usando el diálogo estándar del sistema!
** nombreArchivo = fd.getFile();
** try {
fptr = new FileInputStream(nombreArchivo);
f = new DataInputStream(fptr);
**contenido.setText(); vacío la ventana antes de cargar nuevo archivo
do {
linea = f.readLine();
if (linea!=null) contenido.appendText(linea+"\n");
} while (linea != null);
fptr.close();
editado=false; archivo nuevo -> no editado
}
catch (FileNotFoundException e) {
new Error14("El archivo no existe!");
}
catch (IOException e) {
new Error14("Error leyendo archivo!");
}
catch (NullPointerException e) {
;
}
}
void GrabarArchivo() {
FileOutputStream fptr;
DataOutputStream f;
FileDialog fd = new FileDialog(this,"Grabar...",FileDialog.SAVE); grabo archivo
fd.setFile(nombreArchivo); usando el diálogo estándar del sistema!
fd.show();
nombreArchivo = fd.getFile();
try {
fptr = new FileOutputStream(nombreArchivo);
f = new DataOutputStream(fptr);
f.writeBytes(contenido.getText());
fptr.close();
editado=false; recién grabado -> no editado
}
catch (IOException e) {
new Error14("Error grabando archivo!");
}
catch (NullPointerException e) {
;
}
}
}
/*
Para mostrar los errores...
*/
class Error14 extends Frame {
Error14(String error) {
add("Center",new Label(error));
add("South", new Button("Ok"));
pack();
show();
}
public boolean handleEvent(Event e) {
dispose();
return super.handleEvent(e);
}
}