我已经制作了一个充满JLabels
的数组,并希望为它们添加一个监听器。
听众不需要确切地知道哪一个被点击了,就是那个。 有没有办法将侦听器添加到整个数组而不是使用'for()'循环?
感谢阅读。
答案 0 :(得分:3)
没有开箱即用的解决方案,AFAIK。除了使用愚蠢的黑客,我想你可能不得不使用for循环,它可能是一个10行代码,没什么可担心的。
答案 1 :(得分:3)
如果将标签添加到容器(如JPanel),则可以向此容器添加侦听器,并知道哪个组件位于特定位置。
JPanel panel = new JPanel();
panel.addMouseListener( whichOneListener );
f.setContentPane( panel );
在这种情况下,我使用了mouseListener,因为它为我提供了用户点击的位置。
private static MouseListener whichOneListener = new MouseAdapter() {
public void mouseClicked( MouseEvent e ) {
JComponent c = ( JComponent ) e.getSource();
JLabel l = ( JLabel ) c.getComponentAt( e.getPoint() );
System.out.println( l.getText() );
}
};
并正确打印单击的组件。
完整的源代码是here
答案 2 :(得分:2)
您可以将JLabel数组包装在一个类中,并实现自己的Add()方法,该方法在添加它们时注册该侦听器。
这样你就不必在事后迭代了它们。
答案 3 :(得分:1)
您可以在JPanel(或按钮所在的任何组件)上注册侦听器,因此您只需编写一个侦听器。
答案 4 :(得分:0)
如果它是JLabel列表,我建议使用CollectionUtils.forAllDo - 方法,它允许您对一堆对象应用相同的操作。