Ejemplos java y C/linux

Tutoriales

Enlaces

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Para reconocer la autoría debes poner el enlace http://www.chuidiang.com

Construir un JMenuBar

Como uno de los pasos de nuestro editor de textos sencillo en java, vamos a aprender a construir una barra de menú. No nos meteremos en demasiadas profunidades, sólo en cómo construir el menú y darle funcionalidad.

Componentes java para menús: JMenuBar, JMenu, JMenuItem y JSeparator

Para construir una barra de menú tenemos estos componentes.

Poner acciones en los JMenuItem

Para que un JMenuItem haga algo, al crearlo hay que pasarle una clase que implemente la interface Action. Esta clase debe tener un método actionPerformed() que es el que se ejecutará cuando se pinche con el ratón en esa opción de menú.

public class MiAccionDeMenu implements Action
{
   ...
   public void actionPerformed (ActionEvent e)
   {
      // Aquí lo que queremos que haga esa opción de menú.
   }
}
...
MiAccionDeMenu miAccion = new MiAccionDeMenu();
JMenuItem menuItem = new JMenuItem(miAccion);

El problemilla con esto es que Action requiere que implementemos más métodos un poco engorrosos. Suele ser normal heredar de AbstractAction en vez de implementar todos los métodos de Action. Heredando de AbstractAction sólo tenemos que implementar el método actionPerformed().

public class MiAccionDeMenu extends AbstractAction
{
   public void actionPerformed (ActionEvent e)
   {
      // Aquí lo que queremos que haga esa opción de menú.
   }
}
...
MiAccionDeMenu miAccion = new MiAccionDeMenu();
JMenuItem menuItem = new JMenuItem(miAccion);

Poner etiquetas, iconos y tecla aceleradora a las acciones de menú

Para poner la etiqueta al JMenuItem, o ponerle un icono o una tecla de acceso rápido (estilo Ctrl-C para "Copiar", Ctrl-V para "Pegar", etc), se hace con la Action que metemos en el JMenuItem. El código puede ser así

accionCopiar.putValue(Action.NAME, "Copiar");
accionCopiar.putValue(
   Action.ACCELERATOR_KEY,
   KeyStroke.getAWTKeyStroke('C', Event.CTRL_MASK));

Todo se hace con el método putValue(). Este admite dos parámetros. Uno es el nombre de lo que queremos cambiar o poner (Action.NAME para la etiqueta visible en el JMenuItem, Action.ACCELERATOR_KEY para la tecla de acceso rápido, Action.SMALL_ICON para una imágen, etc).

En el código hemos puesto "Copiar" como texto visible y Ctrl-C como tecla aceleradora. Lo del KeyStroke es la forma de decir Ctrl-C y no nos vamos a meter en ello. Simplemente es el caracter que queremos 'C' con Ctrl (lo de CTRL_MASK).

Construimos la barra de menú completa.

Si suponemos que ya tenemos hechas nuestras acciones y las hemos llamado accionSalvar, accionCargar, accionSalir, accionCopiar, etc, etc, el código que construye la barra de menú puede ser como este:

Una barra de menú JMenuBar con dos JMenu: "Archivo" y "Editar"

JMenuBar barraMenu = new JMenuBar();
JMenu menuArchivo = new JMenu("Archivo");
JMenu menuEditar = new JMenu("Editar");
barraMenu.add(menuArchivo);
barraMenu.add(menuEditar);

Para contruir el contenido del menuEditar, el código puede ser como este

JMenuItem copiar = new JMenuItem(accionCopiar);
JMenuItem cortar = new JMenuItem(accionCortar);
JMenuItem pegar = new JMenuItem(accionPegar);
JMenuItem buscar = new JMenuItem(accionBuscar);
menuEditar.add(copiar);
menuEditar.add(cortar);
menuEditar.add(pegar);
menuEditar.add(new JSeparator()); // Una rayita separadora.
menuEditar.add(buscar);

Como soy adivino, adivino que no es necesario contar cómo se hace el contenido del menú "Archivo".

Ahora vamos a la siguiente parte, leer y escribir un fichero de texto ...

Estadísticas y comentarios

Numero de visitas desde el 4 Feb 2007: