2012-09-14 4 views
7

У меня есть JPopUpMenu, который я добавил в несколько JTables, и я хотел бы получить конкретную таблицу, которая была нажата правой кнопкой мыши, чтобы я мог внести в нее изменения. Как я могу получить компонент, который запускает JPopupMenu в Слушателе Action?Как получить компонент, который вызвал 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 для использования componentPopupMenu. Теперь используйте Action вместо ActionListener, и это будет идеально :-) – kleopatra

+0

@ kleopatra, что вы имеете в виду? как я могу использовать Action? – Igor

+0

Самый быстрый способ узнать, что нужно прочитать в учебнике (см. В вики-тегах wiki) главы о том, как использовать Actions/Menus :-) – kleopatra

ответ

9

Используйте метод getInvoker().

Component invoker = popupMenu.getInvoker(); 
+0

ps, ​​вам нужно указать источник 'ActionEvent' на ссылку' JPopupMenu' first;) – MadProgrammer

+0

Это работает. Я просто отредактирую его, чтобы он соответствовал моему коду. – Igor

+0

Одна проблема, хотя ... заголовок остается выбранным до тех пор, пока он не будет снова нажат. Есть идеи? – Igor

0

Использовать метод event.getSource();

+1

нет, это даст вам всплывающее окно, а не его invoker – kleopatra

Смежные вопросы