Capturar eventos de mouse em componentes que se sobrepõe

4 respostas
FelipeBValio

Olá. Eu tenho dois jpanel, ambos capturam eventos do mouse (mouseListener e mouseMotionListener).
Além do mais, um dos jpanel adiciona o outro. Botei o exemplo resumido abaixo.

JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();

panel1.add(panel2);

panel1.addMouseListener( new MouseListener() {...} );
panel2.addMouseListener( new MouseListener() {...} );

Ambos funcionam muito bem, o problema é que quando eu gero um evento do mouse, apenas um dos jpanel recebe o evento (o panel2).
Isso é algum problema de hierarquia ou coisa assim? Eu preciso que ambos processem o evento.

Agradeço sugestões.

4 Respostas

M

Se o painel 2 foi clicado, só ele recebe os eventos (mesmo que haja um “super painel” que o contém).

Você realmente precisa que ambos recebam o evento?

FelipeBValio

Sim, preciso fazer um tratamento diferenciado para os diferentes eventos de mouse em ambos. No melhor dos casos, eu posso me virar tratando o evento no painel pai, mas só o filho está recebendo-o. Assim complica.

M

Você pode criar um método na sua classe para centralizar o tratamento de cliques. Por exemplo:

private void trataEvento(MouseEvent e) {
// faz o que for preciso
}

E quando qualquer um dos painéis fossem pressionados, eles chamariam esse método passando o MouseEvent.

Assim, sempre que eles forem pressionados esse método será chamado e você pode saber quem originou o evento com o método getSource() de MouseEvent.

Que tal?

FelipeBValio

Legal, gostei. Vai se encaixar bem no que eu tenho. Valeu.

Criado 17 de dezembro de 2009
Ultima resposta 17 de dez. de 2009
Respostas 4
Participantes 2