루프없이 배열의 모든 구성 요소를 선택하십시오.
문제
나는 배열을 가득 채웠다 JLabels
청취자를 추가하고 싶습니다.
청취자는 어느 것을 클릭했는지 정확히 알 필요가 없습니다. 'for ()'루프를 사용하는 대신 리스너를 전체 배열에 추가하는 방법이 있습니까?
읽어 주셔서 감사합니다.
해결책
라벨이 컨테이너 (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 () 메소드를 구현할 수 있습니다.
이런 식으로 당신은 나중에 그들을 반복 할 필요가 없습니다 ..
yyou는 JPANEL에 리스너를 등록 할 수 있으므로 단일 리스너 만 작성하면됩니다.
Jlabels 목록이라면 사용하는 것이 좋습니다. CollectionUtils.foralldo - 많은 객체에 동일한 동작을 적용 할 수있는 메소드.
제휴하지 않습니다 StackOverflow