如何在JavaSwing中访问运行时实例化的对象的事件侦听器

如何在JavaSwing中访问运行时实例化的对象的事件侦听器,java,swing,variables,subclass,event-listener,Java,Swing,Variables,Subclass,Event Listener,我有一个定制的JPanelitemsallcard(String prodID,String productName,String price,String retailer),我使用它在另一个JPanel中创建了多个实例,在按钮的ActionPerformed事件上使用不同的参数,如下所示: JPanel iC=new itemsallcard(“123456789ab”、“Inspiron 7567英特尔核心i5戴尔笔记本电脑”、“48957”、“Cloudtail私人有限公司”); mai

我有一个定制的JPanel
itemsallcard(String prodID,String productName,String price,String retailer)
,我使用它在另一个JPanel中创建了多个实例,在按钮的ActionPerformed事件上使用不同的参数,如下所示:

JPanel iC=new itemsallcard(“123456789ab”、“Inspiron 7567英特尔核心i5戴尔笔记本电脑”、“48957”、“Cloudtail私人有限公司”);
mainContentPane.add(iC);
mainContentPane.revalidate();
mainContentPane.repaint();
但是,由于所有新的JPanel都是使用相同的代码创建的,使用的是相同的变量
iC
,因此我不知道如何从它们访问特定的JPanel变量,因此也无法访问其事件侦听器。
如何实现这一点?

也许可以创建一个ArrayList(如果您不需要访问不基于位置的特定列表)

ArrayList panels=new ArrayList();
或者,如果您需要访问它们,您可以制作一个“HashMap”并将您的ID存储在其中

WeakHashMap panels=新的WeakHashMap();
panels.put(“123456789ab”,新项目SmallCard(“123456789ab”,“Inspiron 7567英特尔核心i5戴尔笔记本电脑”,“48957”,“Cloudtail私人有限公司”);//添加具有该信息的产品
panels.get(“123456789ab”);//返回具有该ID的面板。

希望这有帮助。

您需要编写一个通用侦听器:

  • 在侦听器代码中,使用
    getSource()
    方法获取事件源
  • 一旦知道源组件,就可以使用该组件的
    getParent()
    方法
  • 现在您可以访问该面板,并且可以访问该面板的任何方法/变量