如何在 java swing 中访问在运行时实例化的对象的事件侦听器
How access event listeners of an object instantiated on runtime in java swing
我有一个自定义的 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();
然而,由于所有新的 JPanel 都是使用相同的代码使用相同的变量创建的 iC
,我不知道如何从它们访问特定的 JPanel 变量,因此也无法访问其事件侦听器.
我怎样才能做到这一点?
也许创建一个 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.
希望对您有所帮助。
您需要编写一个通用监听器:
- 在侦听器代码中,您使用
getSource()
方法获取事件源。
- 一旦您知道源组件,您就可以使用该组件的
getParent()
方法。
- 现在您可以访问该面板,您可以访问该面板的任何 method/variable。
我有一个自定义的 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();
然而,由于所有新的 JPanel 都是使用相同的代码使用相同的变量创建的 iC
,我不知道如何从它们访问特定的 JPanel 变量,因此也无法访问其事件侦听器.
我怎样才能做到这一点?
也许创建一个 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.
希望对您有所帮助。
您需要编写一个通用监听器:
- 在侦听器代码中,您使用
getSource()
方法获取事件源。 - 一旦您知道源组件,您就可以使用该组件的
getParent()
方法。 - 现在您可以访问该面板,您可以访问该面板的任何 method/variable。