elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  JPopupMenu que no responde a eventos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: JPopupMenu que no responde a eventos  (Leído 6,052 veces)
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
JPopupMenu que no responde a eventos
« en: 19 Agosto 2008, 02:19 am »

Hola, veréis, ando haciendo una aplicación que lee una base de datos y la muestra en un JTable.

La cosa es que la tabla tiene unos campos en los que puedes elegir entre varias opciones predeterminadas y para seleccionar unas u otras he decidido mostrar un JPopupMenu, ya que insertar un JComboBox se me hacía demasiado largo :P

Lo añado así:
Código
  1.        JPopupMenu pop = new JPopupMenu();
  2.        JMenu sub = new JMenu("Submenu");    
  3.            sub.add(new JMenuItem("Subitem 1"));
  4.            sub.add(new JMenuItem("Subitem 2"));
  5.        pop.add(sub);
  6.        pop.add(new JMenuItem("Item 1"));
  7.        pop.add(new JMenuItem("Item 2"));
  8.  
  9.        pop.setLocation(evt.getLocationOnScreen());
  10.        pop.setVisible(true);;

Lo raro es que al posicionar el ratón sobre el sub-menú no se extienden los sub-elementos ni nada, como lo hacen los menus normales...


Estoy usando NetBeans, pero si añado los menúes desde el editor tampoco me funciona... Alguna sugerencia de como hacerlo o algún ejemplillo?

Muchas gracias por adelantado
Salu2



En línea

Ferсhu


Desconectado Desconectado

Mensajes: 1.215

Menos palabras y Mas codigos.


Ver Perfil WWW
Re: JPopupMenu que no responde a eventos
« Respuesta #1 en: 19 Agosto 2008, 02:58 am »

la parte de MouseListener esta ???

aca hay unos ejemplos de menus, entre ellos popmenu, aver si te sirven:

http://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/menu.html


En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: JPopupMenu que no responde a eventos
« Respuesta #2 en: 19 Agosto 2008, 14:59 pm »

A ver, la cosa es que si añado un menú normal con el ejemplo mismo que viene el la web que me has pasado, cuando el menú pierde el foco (haces click por el formulario) desaparece automáticamente o al colocar el ratón sobre un menú con submenús automáticamente se muestran los submenús...

Con el JPopupMenu no pasa eso, yo lo muestro, si hago click en el formulario, incluso si lo muevo se queda por ahí flotando y tampoco me muestra los submenús.. me toca hacerlo a mano o que? que eventos se supone que tengo que escuchar para que haga eso?

Salu2
En línea

Ferсhu


Desconectado Desconectado

Mensajes: 1.215

Menos palabras y Mas codigos.


Ver Perfil WWW
Re: JPopupMenu que no responde a eventos
« Respuesta #3 en: 20 Agosto 2008, 07:04 am »

creo q es por q no implementas "actionlistener", pero nose como declaraste la clase. por otro lado como creas los menu items ahi si estoy seguro q no le asignas nada. Aca te dejo el ejemplo de esa web, pero le sake un par de cosas y le agregue un sub menu, al clickear en cualkier subitem se detecta el evento, dsp veras lo q haces con ello.

Código:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JPopupMenu;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;
import javax.swing.JMenuBar;
import javax.swing.ImageIcon;

import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JFrame;

/*
 * This class adds popup menus to MenuDemo.
 */
public class PopupMenuDemo extends JFrame implements ActionListener, ItemListener {
    JTextArea output;
    JScrollPane scrollPane;
    String newline = "\n";
    JPopupMenu popup;

    public PopupMenuDemo() {
        JMenuBar menuBar;
        JMenu menu, submenu;
        JMenuItem menuItem;
        JRadioButtonMenuItem rbMenuItem;
        JCheckBoxMenuItem cbMenuItem;

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        //Add regular components to the window, using the default BorderLayout.
        Container contentPane = getContentPane();
        output = new JTextArea(5, 30);
        output.setEditable(false);
        scrollPane = new JScrollPane(output);
        contentPane.add(scrollPane, BorderLayout.CENTER);

     
        // MIRA DE ACA........
        //Create the popup menu.
        popup = new JPopupMenu();
       
        menuItem = new JMenuItem("A popup menu item");
        menuItem.addActionListener(this);
        popup.add(menuItem);
       
        JMenu sub = new JMenu("Submenu");             
        menuItem = new JMenuItem("Subitem 1");
        menuItem.addActionListener(this);
        sub.add(menuItem);       
        menuItem = new JMenuItem("Subitem 2");
        menuItem.addActionListener(this);
        sub.add(menuItem);       
        popup.add(sub);
             
        //......HASTA ACA

        //Add listener to components that can bring up popup menus.
        MouseListener popupListener = new PopupListener();
        output.addMouseListener(popupListener);
        scrollPane.addMouseListener(popupListener);
       
    }

    public void actionPerformed(ActionEvent e) {
        JMenuItem source = (JMenuItem)(e.getSource());
        String s = "Action event detected."
                   + newline
                   + "    Event source: " + source.getText()
                   + " (an instance of " + getClassName(source) + ")";
        output.append(s + newline);
    }

    public void itemStateChanged(ItemEvent e) {
        JMenuItem source = (JMenuItem)(e.getSource());
        String s = "Item event detected."
                   + newline
                   + "    Event source: " + source.getText()
                   + " (an instance of " + getClassName(source) + ")"
                   + newline
                   + "    New state: "
                   + ((e.getStateChange() == ItemEvent.SELECTED) ?
                     "selected":"unselected");
        output.append(s + newline);
    }

    // Returns just the class name -- no package info.
    protected String getClassName(Object o) {
        String classString = o.getClass().getName();
        int dotIndex = classString.lastIndexOf(".");
        return classString.substring(dotIndex+1);
    }

    public static void main(String[] args) {
        PopupMenuDemo window = new PopupMenuDemo();

        window.setTitle("PopupMenuDemo");
        window.setSize(450, 260);
        window.setVisible(true);
    }

    class PopupListener extends MouseAdapter {
        public void mousePressed(MouseEvent e) {
            maybeShowPopup(e);
        }

        public void mouseReleased(MouseEvent e) {
            maybeShowPopup(e);
        }

        private void maybeShowPopup(MouseEvent e) {
            if (e.isPopupTrigger()) {
                popup.show(e.getComponent(),
                           e.getX(), e.getY());
            }
        }
    }
}


Saludos!!
En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: JPopupMenu que no responde a eventos
« Respuesta #4 en: 20 Agosto 2008, 14:01 pm »

Ok, muchas gracias Ferchu me miraré con detalle el código a ver que es lo que me falta ;)

Salu3

EDIT -> Gracias Ferchu, ya me funciona ^^
« Última modificación: 21 Agosto 2008, 00:03 am por E0N » En línea

sapito169


Desconectado Desconectado

Mensajes: 628



Ver Perfil
Re: JPopupMenu que no responde a eventos
« Respuesta #5 en: 21 Agosto 2008, 02:36 am »

exelente codigo gracias
« Última modificación: 21 Agosto 2008, 02:42 am por sapito169 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Menú Emergente en Java (jPopupMenu)
Java
MayRo 0 1,366 Último mensaje 23 Julio 2016, 23:05 pm
por MayRo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines