Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Knute Johnson Newsgroups: comp.lang.java.programmer Subject: Problem getting the JPopupMenu from the Action it generates Date: Tue, 12 Aug 2014 17:39:10 -0700 Organization: A noiseless patient Spider Lines: 86 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Wed, 13 Aug 2014 00:39:00 +0000 (UTC) Injection-Info: mx05.eternal-september.org; posting-host="aba33539224e5c782fe0c4053f7756fd"; logging-data="13508"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19ge9mxK9tCwFTZkIq/DbHC" User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.0 Cancel-Lock: sha1:9XcTNCDukJcf1j1ROTmv+dvTgos= Xref: csiph.com comp.lang.java.programmer:29652 I'm having a problem getting the JPopupMenu from an Action that is generated by the JPopupMenu. The error is a ClassCastException and it is saying that what is returned by ActionEvent.getSource() cannot be cast to a JPopupMenu because it is a JPopupMenu$1. JPopupMenu$1 is an anonymous class and shouldn't be returned by ActionEvent.getSource(). In the end, I'm trying to get to the component that was right clicked to pop up the menu. I'm stumped, any ideas? Thanks, C:\Users\Knute Johnson\com\knutejohnson\cookbook>java test javax.swing.JPopupMenu$1[,1,3,97x21,invalid,alignmentX=0.0,alignmentY=0.0,border =javax.swing.plaf.metal.MetalBorders$MenuItemBorder@23b2ab4,flags=264,maximumSiz e=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=, margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBor der=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rollo verSelectedIcon=,selectedIcon=,text=do something] Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing .JPopupMenu$1 cannot be cast to javax.swing.JPopupMenu at test$someAction.actionPerformed(test.java:29) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.AbstractButton.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) ... import java.awt.*; import java.awt.event.*; import javax.swing.*; public class test extends JFrame { final JPopupMenu popupMenu; public test() { setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); popupMenu = new JPopupMenu(); popupMenu.add(new someAction()); JTextField tf = new JTextField("textField"); tf.setComponentPopupMenu(popupMenu); add(tf,BorderLayout.CENTER); pack(); setVisible(true); } public class someAction extends AbstractAction { public someAction() { putValue(NAME,"do something"); } public void actionPerformed(ActionEvent ae) { System.out.println(ae.getSource()); System.out.println(); System.out.println((JPopupMenu)ae.getSource()); } } public static void main(String... args) { EventQueue.invokeLater(new Runnable() { public void run() { new test(); } }); } } -- Knute Johnson