?? java11.htm
字號:
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0z">
<TITLE>Untitled</TITLE>
</HEAD>
<BODY background=/iconos/1.gif TEXT=000000 LINK=FF0000 VLINK=A62A2A>
<H1>Volviendo al AWT<BR>
</H1>
<P>
Para aprender un poquito más sobre la biblioteca gráfica
(AWT), vamos a modificar nuestro último programa para usar
menús.
<P>
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:<BR>
<PRE>
<FONT SIZE=2>/*
// ----- Archivo: Ejemplo14.java
*/
import java.io.*;
import java.awt.*;
import java.applet.*;
public class Ejemplo14 extends Applet {
public void init() {
new Ventana14(<B>true</B>); // con "true" avisamos que es applet
}
<B> public static void main(String args[]) {</B> // para usarlo como aplicación
<B> Ventana14 v14 = new Ventana14(false);</B> // con "false" avisamos que no es applet
<B> }
</B>}
/*
// -------- Esta clase es la que en realidad hace el trabajo
*/
class Ventana14 extends Frame {
TextArea contenido;
<B>boolean enApplet;</B> // para indicar si lo llamamos como applet
<B>String nombreArchivo;</B> // para guardar el nombre del archivo abierto
<B>MenuItem mArchivoAbrir;</B> // ACA ESTAN LOS ITEMS DE LOS MENUS
<B>MenuItem mArchivoGrabar;</B> // .
<B>MenuItem mArchivoSalir;</B> // .
<B>MenuItem mEditCortar;</B> // .
<B>MenuItem mEditCopiar;</B> // .
<B>MenuItem mEditPegar;</B> // .
<B>MenuItem mEditTodo;</B> // v
<B>String clipboard;</B> // buffer para cortar y pegar
<B>boolean editado = false;</B> // acá indicamos si modificamos el archivo
Ventana14(<B>boolean enApp</B>) {
super("Ejemplo de E/S");
<B> enApplet = enApp;</B> // recordamos si es applet o no
<B> Menu menuArchivo = new Menu("&Archivo");</B> // CREAMOS LOS MENUS!!!
<B> 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);
</B> contenido = new TextArea(); // solo pongo una ventana de texto
add("Center",contenido);
pack();
show();
<B> clipboard = new String("");</B> // clipboard vacío,
<B> mEditPegar.disable();</B> // nada para pegar,
<B> mArchivoGrabar.disable();</B> // nada para grabar
}
public boolean handleEvent(Event e) {
if ((e.id==Event.WINDOW_DESTROY)||(<B>e.target==mArchivoSalir</B>)) {
<B>if (editado) System.out.println("Pedir confirmación!\n");</B> // debería confirmar
// si se quiere ir sin grabar!
if (enApplet) dispose();
else System.exit(0);
}
<B> if (e.target==mArchivoAbrir) CargarArchivo();</B> // acá proceso selecciones
<B> if (e.target==mArchivoGrabar) GrabarArchivo();</B> // de menú
<B> if (e.target==mEditCortar) {
clipboard = contenido.getSelectedText();
mEditPegar.enable();
contenido.replaceText("",contenido.getSelectionStart(),contenido.getSelectionEnd());
editado=true;
}
if (e.target==mEditCopiar) {
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);
</B> return super.handleEvent(e);
}
void CargarArchivo() {
FileInputStream fptr;
DataInputStream f;
<B> String linea = null;
if (editado) System.out.println("Pedir confirmación!\n");
</B> <B>FileDialog fd = new FileDialog(this,"Abrir...",FileDialog.LOAD);</B> // elijo archivo
<B> fd.show();</B> // usando el diálogo estándar del sistema!
<B> nombreArchivo = fd.getFile();
</B> try {
fptr = new FileInputStream(nombreArchivo);
f = new DataInputStream(fptr);
<B>contenido.setText("");</B> // 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();
<B>editado=false;</B> // 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;
<B> FileDialog fd = new FileDialog(this,"Grabar...",FileDialog.SAVE);</B> // grabo archivo
<B> fd.setFile(nombreArchivo);</B> // usando el diálogo estándar del sistema!
<B> fd.show();
nombreArchivo = fd.getFile();
</B> try {
fptr = new FileOutputStream(nombreArchivo);
f = new DataOutputStream(fptr);
f.writeBytes(contenido.getText());
fptr.close();
<B> editado=false;</B> // 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);
}
}<BR>
</FONT>
</PRE>
<H2>Menú a la Java<BR>
</H2>
<P>
Bueno, lo primero que vamos a ver son los menús.
<P>
La barra de menú está compuesta por menúes,
que a su vez están compuestos de ítems (que pueden
también ser menúes). Por ejemplo la barra de menú
la declaramos con:<BR>
<PRE>
<FONT SIZE=2>MenuBar barraMenu = new MenuBar();<BR>
</FONT>
</PRE>
<P>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -