2012-09-14 11 views
7

Mam JPopUpMenu, które dodałem do wielu JTables i chciałbym uzyskać konkretną tabelę, która jest kliknięta prawym przyciskiem, więc mogę wprowadzić do niej zmiany. Jak mogę uzyskać komponent uruchamiający JPopupMenu w odbiorniku akcji?Jak zdobyć składnik, który wywoł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 za używanie menu componentPopupMenu. Teraz użyj Action zamiast ActionListener i byłoby idealnie :-) – kleopatra

+0

@kleopatra co masz na myśli? jak mogę użyć Action? – Igor

+0

Najszybszym sposobem nauki jest zapoznanie się z samouczkiem (wymienionym w wiki tagu swing), rozdziałami opisującymi sposób korzystania z akcji/menu :-) – kleopatra

Odpowiedz

9

Użyj metody getInvoker().

Component invoker = popupMenu.getInvoker(); 
+0

ps należy przypisać do źródła 'ActionEvent' odniesienie do' JPopupMenu' pierwszy;) – MadProgrammer

+0

To działa. Po prostu zmienię go tak, by pasował do mojego kodu. – Igor

+0

Problem jednak ... Nagłówek pozostaje zaznaczony, dopóki nie zostanie ponownie kliknięty. Jakieś pomysły? – Igor

0

Użyj metody event.getSource();

+1

nie, to da ci popup, a nie jego wywoływacz – kleopatra

Powiązane problemy