2012-09-14 16 views
7

Tengo un JPopUpMenu que agregué a múltiples JTables y me gustaría obtener la tabla específica en la que se hace clic con el botón derecho para poder hacer cambios en ella. ¿Cómo puedo obtener el componente que desencadena el JPopupMenu en el Listener de acción?¿Cómo obtener el componente que invocó a JPopupMenu?

JPopupMenu popupMenu = new JPopupMenu(); 
JMenuItem menuItemRename = new JMenuItem("Rename"); 
popupMenu.add(menuItemRename); 
table.getTableHeader().setComponentPopupMenu(popupMenu); 

ActionListener menuListener = new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
      String newTitle = JOptionPane.showInputDialog(null, "Enter new title"); 
        //Get the table and rename it here 
       } 
      }; 
menuItemRename.addActionListener(menuListener); 
+1

+1 para usar componentPopupMenu. Ahora usa Action en lugar de ActionListener y sería perfecto :-) – kleopatra

+0

@kleopatra ¿a qué te refieres? ¿Cómo puedo usar Acción? – Igor

+0

la manera más rápida de aprender que es leer el tutorial (referenciado en la wiki de la etiqueta de swing) capítulos sobre cómo usar Acciones/Menús :-) – kleopatra

Respuesta

9

Utilice el método getInvoker().

Component invoker = popupMenu.getInvoker(); 
+0

ps, ​​necesitarás colocar la fuente 'ActionEvent' como referencia' JPopupMenu' primero;) – MadProgrammer

+0

Eso funciona. Voy a editarlo para que se ajuste a mi código. – Igor

+0

Un problema, sin embargo ... el encabezado permanece seleccionado hasta que se vuelva a hacer clic. ¿Algunas ideas? – Igor

0

Utilice el método event.getSource();

+1

no, eso le dará la ventana emergente, no su invocador – kleopatra

Cuestiones relacionadas