选择没有循环的数组的所有组件

时间:2009-11-07 15:38:47

标签: java arrays listener

我已经制作了一个充满JLabels的数组,并希望为它们添加一个监听器。

听众不需要确切地知道哪一个被点击了,就是那个。 有没有办法将侦听器添加到整个数组而不是使用'for()'循环?

感谢阅读。

5 个答案:

答案 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 - 方法,它允许您对一堆对象应用相同的操作。