我有一个JLabel
s网格。我把它们都添加到了ArrayList中。我如何通过迭代将MouseClickListener
s添加到所有它们中。一些单独的线路:
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()
进行添加。