Pergunta

Eu fiz uma variedade cheia de JLabels e gostaria de adicionar um ouvinte a eles.

O ouvinte não precisa saber exatamente em qual foi clicado, apenas esse era. Existe uma maneira de adicionar o ouvinte a toda a matriz em vez de usar um loop 'para ()'?

Obrigado pela leitura.

Foi útil?

Solução

Se seus rótulos forem adicionados a um contêiner (como um JPanel), você poderá adicionar um ouvinte a este contêiner e saber qual componente está em determinado local.

JPanel panel = new JPanel();
panel.addMouseListener( whichOneListener );
f.setContentPane( panel );

Nesse caso, uso um MouseListener porque isso me dá o local onde o usuário clicou.

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() );
    }

};

E imprime corretamente qual componente foi clicado.

O código -fonte completo é aqui

Outras dicas

Não, não há solução de caixa, Afaik. Além de usar hacks estúpidos, acho que você pode ter que usar um loop para loop, e pode ser um código de 10 linhas, nada com que se preocupar.

Você pode envolver sua variedade de jlabels em uma classe e implementar seu próprio método add () que registra o ouvinte ao adicioná -los.

Dessa forma, você não teria que iterar sobre eles depois ..

Você pode registrar o ouvinte no JPanel (ou qualquer componente em que os botões esteja), então você só precisa escrever um único ouvinte.

Se fosse uma lista de jlabels, eu sugiro usar Collectionutils.foralldo - Método que permite aplicar a mesma ação a um monte de objetos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top