문제

나는 배열을 가득 채웠다 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 - 많은 객체에 동일한 동작을 적용 할 수있는 메소드.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top