我做了一个列全的 JLabels 并想添加一个听到他们。

听众不需要确切地知道这一点,只是这一个。有没有办法添加的听众系列,而不是使用一种'用于()'循环?

谢谢你读。

有帮助吗?

解决方案

如果您的标签添加到容器(比如一个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() );
    }

};

和打印正确被点击了哪个组件。

完整的源代码是这里

其他提示

没有没有开箱溶液,AFAIK。除了使用黑客愚蠢的,我想你可能必须使用一个for循环,它可能是一个10行代码,没有什么可担心的。

您可以换你的Jlabel阵列中的类并实现其在加入他们注册侦听自己的Add()方法。

这样你就不必在他们之后迭代..

可以注册到Jpanel(或任何部件的按钮处于)听者,所以你只需要编写单个收听。

如果它是一个列表中的Jlabel,我建议使用 CollectionUtils.forAllDo -方法,该方法可以应用同样的行动来一堆的对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top