通过单击特定标签

时间:2016-05-22 02:28:13

标签: java arraylist mouseevent jlabel joptionpane

我正在尝试在我正在开发的项目中实现一项功能,但我有困难。该项目允许用户创建3个不同的对象,这些对象都共享同一个超类。每个对象都是arrayList的一部分,由JLabel内部的ImageIcon表示。我希望能够单击特定的JLabel并使用toString()方法打开一个消息对话框,该方法返回有关相应对象的信息。

到目前为止,我有一个(实施不当)系统,允许用户单击任何ImageIcon,但它只显示有关最近创建的对象的信息。我知道为什么这段代码只显示它所做的信息,但我不知道如何创建我需要的代码。

如果有人可以提供帮助,我将非常感激。如果有任何问题解释不清楚或需要详细说明,请询问。我已将下面的当前代码附在下面,谢谢。

代码说明:'计数'变量用于计算创建的对象数量(我不能超过9)。我知道当前的代码只会显示' count-1'创建的对象(这是最新的对象)。我只是不知道我需要做些什么才能找到与点击的标签有关的特定对象。

label[count].addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) 
            {
                JOptionPane.showMessageDialog(null, myAppliances.get(count-1).toString()); 
            }});

1 个答案:

答案 0 :(得分:0)

  

每个对象都是arrayList的一部分,由JLabel内部的ImageIcon表示。

这给了它一个很好的暗示。如何做以下

类MyObjectLabel扩展JLabel,如下所示:

public MyObjectLabel extends JLabel
{
   private YourObjectThatisInList localCopyOfObject;
   public MyObjectLabel (YourObjectThatisInList object)
   {
     super(createIconForTheObject(object));
     this.localCopyOfObject=object
   }
    //add getter setter method for localCopyOfObject
}

2)现在为这个类添加监听器。

3)在触发此新Label类的事件时,调用localCopyOfObject的getter并显示存储在MyObjectLabel中的localCopyOfObject的toString。

请注意,createIconForTheObject,只是我展示的一种放置方法。您可以使用自己的方法创建图标

由于