如何动态地将侦听器添加到调用方法的JLabel数组列表中



我有一个JLabel s网格。我把它们都添加到了ArrayList中。我如何通过迭代将MouseClickListeners添加到所有它们中。一些单独的线路:

    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。当然,这里的糟糕之处在于它不可能是最终的。

如果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);
      }
    });
  }

尝试:

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 ));
    }
});

您可以循环遍历ArrayList的大小并添加每一个,但我建议您制作一个自定义的add方法,这样可以避免以后的循环。

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

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

最新更新