如何动态地将侦听器添加到调用方法的JLabel的arraylist

时间:2013-04-10 13:42:05

标签: java arraylist mouseevent actionlistener jlabel

我有一个JLabel的网格。我将它们全部添加到ArrayList中。如何通过迭代将MouseClickListener添加到所有这些中。 仅此一点:

    for (int i=0;i<145;i++)
    jLAL.get(i).addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            jLabelMouseClicked(evt, jLAL.get(i));
        }
    });

jLAL是jLabel ArrayList。这里的坏事当然是它不能是最终的。

3 个答案:

答案 0 :(得分:0)

尝试:

for (int i=0;i<jLAL.size();i++)
final int temp = i;
jLAL.get(i).addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent evt) {
        jLabelMouseClicked(evt, jLAL.get(temp ));
    }
});

答案 1 :(得分:0)

你可以循环遍历ArrayList的大小并添加每一个,但我建议你制作一个自定义的ADD方法,因为它可以避免以后的循环。

public void addLabel(JLabel label){
    label.addMouseListener(yourlistener);
    arraylist.add(label);
}

因此,您不必为要添加的每个JLabel调用arraylist.add(),而是使用addLabel()添加。

答案 2 :(得分:0)

如果您的代码中无法实现BlackBox解决方案,只需创建一个方法,将JLabel最终成为最终的监听器。

    for (int i=0;i<145;i++) {
      addListener(jLAL.get(i));
    }
  }

  private void addListener(final JLabel jLabel) {
    jLabel.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(java.awt.event.MouseEvent evt) {
        jLabelMouseClicked(evt, jLabel);
      }
    });
  }