题
我做了一个列全的 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 -方法,该方法可以应用同样的行动来一堆的对象。
不隶属于 StackOverflow