lunes, 5 de marzo de 2007

Menu contextual (con clic "derecho")

Cuando se hace clic 'derecho', se muestra un menú con las opciones propias del objeto que se está seleccionando. Si se hace clic 'derecho' sobre un icono, se debería mostrar opciones propias que se debe trabajar con ese ícono. En Windows esto se llama 'Menú Contextual' o 'Menú del contexto'.

El término clic 'derecho' no debería llamarse 'derecho'. En sistemas operativos en donde se ha cambiado la posición de los botones del ratón para zurdos, la funciones de los botones - obviamente - cambian. Los botones se les llamaría como "Botón principal & botón secundario" para referencirse al clic 'izquierdo' y clic 'derecho'.

(Por ahí oí que le decían también "clic & anti-clic"..... no sabia que un botón podría inhibir o estar en contra de lo que haga el botón).

Pues bien, aquí un ejemplito bien sencillo de cómo mostrar el menú contextual con Java Swing.

package diesil.swing;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class PopupMenuFrame extends JFrame {
private JPopupMenu popup;

public PopupMenuFrame() {
try {
jbInit();
//para inicializar las propiedades del Frame
}
catch (Exception exception) {
exception.printStackTrace();
}
}

private void jbInit() throws Exception {
setBounds(
100, 100, 200, 200); //definimos la ubicacion del frame
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //... como salimos
// definimos un 'adaptador' para manejar los eventos del ratón
this.addMouseListener(new PopupMenuFrame_this_mouseAdapter(this));
/*el adaptador es por fines de modularidad, aunque tambien declarariamos
la clase PopupMenuFrame que implemente a la interfaz MouseAdapter*/


popup = new JPopupMenu(); //creamos el menu saliente
popup.add(new JMenuItem("Un elemento del menu")); //agregamos elemento
popup.add(new JMenuItem("Otro elemento del menu")); //.. y otro elemento
}
/* esto hará cuando se presione el boton del raton*/
public void this_mousePressed(MouseEvent e) {
mostrarPopupMenu(e);

}
/* esto hará cuando se libere el boton del raton. En algunos VM funcionan
diferente. Este metodo y el anterior al final llaman
al metodo mostrarPopupMenu()*/


public void this_mouseReleased(MouseEvent e) {
mostrarPopupMenu(e);
}
/* Este metodo se encarga de mostrar el menu saliente */
private void mostrarPopupMenu(MouseEvent e) {

if (e.isPopupTrigger()) { //si se desea mostrar el menu saliente...
popup.show(e.getComponent(),
e.getX(), e.getY());
//... mostramos el menu en la ubicacion del raton
}

}

public static void main(String[] args) {
new PopupMenuFrame().setVisible(true);
}

}


class PopupMenuFrame_this_mouseAdapter extends MouseAdapter {
private PopupMenuFrame adaptee;
PopupMenuFrame_this_mouseAdapter(PopupMenuFrame adaptee) {
this.adaptee = adaptee;
}

public void mousePressed(MouseEvent e) {
adaptee.this_mousePressed(e);
}

public void mouseReleased(MouseEvent e) {
adaptee.this_mouseReleased(e);
}
}



2 comentarios:

Si quieres hacer una pregunta más específica, hazla en los foros que tenemos habilitados en Google Groups


Ah! solo se permiten comentarios de usuarios registrados. Si tienes OpenID, bienvenido! Puedes obtener su OpenID, aquí: http://openid.net/