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

时间:2019-05-30 17:48:37

标签: java swing variables subclass event-listener

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

JPanel iC = new itemSmallCard("123456789ab", "Inspiron 7567 Intel Core i5 DELL Laptop", "48957", "Cloudtail Pvt. Ltd.");
        mainContentPane.add(iC);
        mainContentPane.revalidate();
        mainContentPane.repaint();

但是,由于所有新的JPanels都是使用相同的代码使用相同的变量iC创建的,因此我不知道如何从它们访问特定的JPanel变量,因此也无法访问其事件侦听器。 我该如何实现?

2 个答案:

答案 0 :(得分:1)

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

ArrayList<JPanel> panels = new ArrayList<JPanel>();

或者,如果您需要访问它们,则可以制作一个“ HashMap”并在其中存储您的ID。

WeakHashMap<String, JPanel> panels = new WeakHashMap<String, JPanel>();

panels.put("123456789ab", new itemSmallCard("123456789ab", "Inspiron 7567 Intel Core i5 DELL Laptop", "48957", "Cloudtail Pvt. Ltd.");// Adds a product with that info

panels.get("123456789ab"); // Returns the panel with that ID.

希望这会有所帮助。

答案 1 :(得分:1)

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

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