Problema ao usar getButton() dentro do evento mouseEntered. [RESOLVIDO]
8 respostas
G
gohan
Estou querendo saber o botão do mouse que está pressionado dentro do evento mouseEntered.
O problema é que quando tento obter o botão pressionado com getButton() este simplesmente retorna 0.
O evento ouseEntered é invocado quando o mouse entra sobre a are que está o seu componente… e pra isto ocorreer geralmente o usuário não
aperta botão nenhum do mouse… acho que vc terá melhores resultado em saber o botão que foi usado nos eventos de clique e release
G
gohan
OK… Estou sabendo que o evento mouseEntered é executado quando o usuário entra com o mouse dentro do componente.
E essa é realmente a minha intenção: saber qual o botão do mouse o usuário está segurando quando ele entra com o ponteiro no componente.
Nesse caso, é preciso que seja o evento mouseEntered mesmo.
B
BrunoCarlo
Ola,
Bom, mas ae se ele estiver segurando algum botão o evento é o dragged, do MouseMotionListener, e não mouseEntered… mas não sei como ele vai se comportar… pois dae ele começou o evento em outro componente…
G
gohan
Boa sugestão…
Testei os eventos mouseMoved e mouseDragged de MouseMotionListener, mas nenhum deles retornou o botão pressionado com getButton()… De qualquer forma vou continuar tentando com outros eventos…
B
BrunoCarlo
Ola,
É, vc tera que fazer umas junções de eventos… pq se ele entrar no seu componente arrastando… e sair dele sem soltar o botao, logo não terás o botão… dae vc terá que pegar o botao no mouseRealeased…
Bom, agora a pergunta… é realmente necessário isto? pergunta indiscreta, pra que vc quer isto?
G
gohan
Quero fazer um efeito tipo o do campo minado do windows: quando vc clica em um quadrado e sai arrastando o mouse pelos outros quadrados…
Inclusive no mouseReleased é outro problema… pois quando clicamos em um componente, arrastamos e soltamos em outro, o evento mouseReleased é disparado no componente que foi clicado inicialmente, e assim, como vamos saber em que componente realmente soltamos o botão do mouse?
Bom… mas esse é outro assunto… primeiro é preciso resolver a questão do mouseEntered…
Uma coisa pode ser feita… mas fica uma coisa parecida com RTA: quando o evento mousePressed é acionado, pode-se setar uma variável booleana como true, e aí quando o evento mouseEntered acionar, verificamos a variável booleana para saber se o botão do mouse está pressionado…
Tudo isso, só porque o getButton() não retorna o botão do mouse pressionado no mouseEntered…
Mas, talvez o Swing tenha uma forma certa de se fazer isso, não?
B
BrunoCarlo
Ola,
Faz seguinte… dá uma olhada em TransferHandler, todo componente swing tem um cara destes… e serve exatamente para isto que vc tá tentando fazer… pq fazer isto via mouseListener vai ser complicado…
G
gohan
Olá!
Olhei a classe TransferHandler, mas não encontrei nada que ajudasse.
E então lendo o javadoc das classes de eventos…
Consegui!!
O problema é que o getButton() retorna somente os botões com estado ALTERADO. Para saber o estado CORRENTE dos botões é preciso usar o getModifiersEx().