← Volver a publicaciones

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.


<span style="color:#000080;"><b>package</b></span><span style="color:#000000;"> diesil.swing;<br /><br /></span><span style="color:#000080;"><b>import</b></span><span style="color:#000000;"> java.awt.event.MouseAdapter;<br /></span><span style="color:#000080;"><b>import</b></span><span style="color:#000000;"> java.awt.event.MouseEvent;<br /><br /></span><span style="color:#000080;"><b>import</b></span><span style="color:#000000;"> javax.swing.*;<br /><br /></span><span style="color:#000080;"><b>public</b></span><span style="color:#000000;"> </span><span style="color:#000080;"><b>class</b></span><span style="color:#000000;"> PopupMenuFrame </span><span style="color:#000080;"><b>extends</b></span><span style="color:#000000;"> JFrame {<br />   </span><span style="color:#000080;"><b>private</b></span><span style="color:#000000;"> JPopupMenu </span><span style="color:#800080;">popup</span><span style="color:#000000;">;<br /><br />   </span><span style="color:#000080;"><b>public</b></span><span style="color:#000000;"> PopupMenuFrame() {<br />       </span><span style="color:#000080;"><b>try</b></span><span style="color:#000000;"> {<br />           jbInit(); </span><span style="color:#008000;">//para inicializar las propiedades del Frame</span><span style="color:#000000;"><br />       } </span><span style="color:#000080;"><b>catch</b></span><span style="color:#000000;"> (Exception exception) {<br />           exception.printStackTrace();<br />       }<br />   }<br /><br />   </span><span style="color:#000080;"><b>private</b></span><span style="color:#000000;"> </span><span style="color:#000080;"><b>void</b></span><span style="color:#000000;"> jbInit() </span><span style="color:#000080;"><b>throws</b></span><span style="color:#000000;"> Exception {<br />       setBounds(</span><span style="color:#0000ff;">100</span><span style="color:#000000;">, </span><span style="color:#0000ff;">100</span><span style="color:#000000;">, </span><span style="color:#0000ff;">200</span><span style="color:#000000;">, </span><span style="color:#0000ff;">200</span><span style="color:#000000;">); </span><span style="color:#008000;">//definimos la ubicacion del frame</span><span style="color:#000000;"><br />       </span><span style="color:#000080;"><b>this</b></span><span style="color:#000000;">.setDefaultCloseOperation(<i>JFrame</i>.<i>EXIT_ON_CLOSE</i>); </span><span style="color:#008000;">//... como salimos</span><span style="color:#000000;"><br />       </span><span style="color:#008000;">// definimos un 'adaptador' para manejar los eventos del ratón</span><span style="color:#000000;"><br />       </span><span style="color:#000080;"><b>this</b></span><span style="color:#000000;">.addMouseListener(</span><span style="color:#000080;"><b>new</b></span><span style="color:#000000;"> PopupMenuFrame_this_mouseAdapter(</span><span style="color:#000080;"><b>this</b></span><span style="color:#000000;">));<br />       </span><span style="color:#008000;">/*el adaptador es por fines de modularidad, aunque tambien declarariamos<br />        la clase PopupMenuFrame que implemente a la interfaz MouseAdapter*/</span><span style="color:#000000;"><br />      <br />       </span><span style="color:#800080;">popup</span><span style="color:#000000;"> = </span><span style="color:#000080;"><b>new</b></span><span style="color:#000000;"> JPopupMenu(); </span><span style="color:#008000;">//creamos el menu saliente</span><span style="color:#000000;"><br />       </span><span style="color:#800080;">popup</span><span style="color:#000000;">.add(</span><span style="color:#000080;"><b>new</b></span><span style="color:#000000;"> JMenuItem(</span><span style="color:#0000ff;">"Un elemento del menu"</span><span style="color:#000000;">)); </span><span style="color:#008000;">//agregamos elemento</span><span style="color:#000000;"><br />       </span><span style="color:#800080;">popup</span><span style="color:#000000;">.add(</span><span style="color:#000080;"><b>new</b></span><span style="color:#000000;"> JMenuItem(</span><span style="color:#0000ff;">"Otro elemento del menu"</span><span style="color:#000000;">)); </span><span style="color:#008000;">//.. y otro elemento</span><span style="color:#000000;"><br />   }<br /></span><span style="color:#008000;">/* esto hará cuando se presione el boton del raton*/</span><span style="color:#000000;"><br />   </span><span style="color:#000080;"><b>public</b></span><span style="color:#000000;"> </span><span style="color:#000080;"><b>void</b></span><span style="color:#000000;"> this_mousePressed(MouseEvent e) {<br />       mostrarPopupMenu(e);<br /><br />   }<br />   </span><span style="color:#008000;">/* esto hará cuando se libere el boton del raton. En algunos VM funcionan<br />    diferente. Este metodo y el anterior al final llaman<br />    al metodo mostrarPopupMenu()*/</span><span style="color:#000000;"><br /><br />   </span><span style="color:#000080;"><b>public</b></span><span style="color:#000000;"> </span><span style="color:#000080;"><b>void</b></span><span style="color:#000000;"> this_mouseReleased(MouseEvent e) {<br />       mostrarPopupMenu(e);<br />   }<br /></span><span style="color:#008000;">/* Este metodo se encarga de mostrar el menu saliente */</span><span style="color:#000000;"><br />   </span><span style="color:#000080;"><b>private</b></span><span style="color:#000000;"> </span><span style="color:#000080;"><b>void</b></span><span style="color:#000000;"> mostrarPopupMenu(MouseEvent e) {<br />      <br />       </span><span style="color:#000080;"><b>if</b></span><span style="color:#000000;"> (e.isPopupTrigger()) { </span><span style="color:#008000;">//si se desea mostrar el menu saliente...</span><span style="color:#000000;"><br />           </span><span style="color:#800080;">popup</span><span style="color:#000000;">.show(e.getComponent(),<br />                      e.getX(), e.getY()); </span><span style="color:#008000;">//... mostramos el menu en la ubicacion del raton</span><span style="color:#000000;"><br />       }<br /><br />   }<br /><br />   </span><span style="color:#000080;"><b>public</b></span><span style="color:#000000;"> </span><span style="color:#000080;"><b>static</b></span><span style="color:#000000;"> </span><span style="color:#000080;"><b>void</b></span><span style="color:#000000;"> <i>main</i>(String[] </span><span style="color:#808080;">args</span><span style="color:#000000;">) {<br />       </span><span style="color:#000080;"><b>new</b></span><span style="color:#000000;"> PopupMenuFrame().setVisible(</span><span style="color:#000080;"><b>true</b></span><span style="color:#000000;">);<br />   }<br /><br />}<br /><br /><br /></span><span style="color:#000080;"><b>class</b></span><span style="color:#000000;"> PopupMenuFrame_this_mouseAdapter </span><span style="color:#000080;"><b>extends</b></span><span style="color:#000000;"> MouseAdapter {<br />   </span><span style="color:#000080;"><b>private</b></span><span style="color:#000000;"> PopupMenuFrame </span><span style="color:#800080;">adaptee</span><span style="color:#000000;">;<br />   PopupMenuFrame_this_mouseAdapter(PopupMenuFrame adaptee) {<br />       </span><span style="color:#000080;"><b>this</b></span><span style="color:#000000;">.</span><span style="color:#800080;">adaptee</span><span style="color:#000000;"> = adaptee;<br />   }<br /><br />   </span><span style="color:#000080;"><b>public</b></span><span style="color:#000000;"> </span><span style="color:#000080;"><b>void</b></span><span style="color:#000000;"> </span><span style="color:#008080;"><i>mousePressed</i></span><span style="color:#000000;">(MouseEvent e) {<br />       </span><span style="color:#800080;">adaptee</span><span style="color:#000000;">.this_mousePressed(e);<br />   }<br /><br />   </span><span style="color:#000080;"><b>public</b></span><span style="color:#000000;"> </span><span style="color:#000080;"><b>void</b></span><span style="color:#000000;"> </span><span style="color:#008080;"><i>mouseReleased</i></span><span style="color:#000000;">(MouseEvent e) {<br />       </span><span style="color:#800080;">adaptee</span><span style="color:#000000;">.this_mouseReleased(e);<br />   }<br />}<br /><br /></span>