Bom tarde, necessito que ocorra uma ação quando a tecla ctrl estiver selecionada e o mouse estiver pressionado.
Se alguem tiver como me ajudar ficarei grato.
Em java certamente existe (porque no eclipse quando seleciona o ctrl e preciona o mouse em cima de uma palavra ele cria a ação de link)
mas não consigo encontrar como se faz uma ação.
Detectar evento com ctrl + clique do mouse
12 Respostas
Você conhece MouseListener? Se sim, basta no método mouseClicked(MouseEvent) chamar o método getModifiers() de MouseEvent e verificar se o control ou shift ou alt (ou ambos!) estão pressionados.
Mas como se faz, pois o getModifiers() me retorna um int e o valor que ele me retornou foi 1170, mas o valor do vk_control é 17, teria como me dar mais uma ajuda?
E agradeço desde já a atenção.
Nesse caso você vai usar só a classe MouseEvent. E eu me enganei… o método certo é getModifiersEx(). Veja o exemplo:
@Override
public void mouseClicked(final MouseEvent e) {
switch (e.getModifiersEx()) {
case (InputEvent.CTRL_DOWN_MASK):
System.out.println("O control estava pressionado "
+ "enquanto clicou com o mouse");
break;
case (InputEvent.SHIFT_DOWN_MASK):
System.out.println("O shift estava pressionado "
+ "enquanto clicou com o mouse");
break;
case (InputEvent.ALT_DOWN_MASK):
System.out.println("O alt estava pressionado "
+ "enquanto clicou com o mouse");
break;
default:
System.out.println("Nenhum modificador...");
break;
}
}
getModifiers retornou 1040, que é [telefone removido] em binário.
java.awt.event.InputEvent.CTRL_DOWN_MASK é o valor 128, que é 10000000 em binário.
Efetuando a operação “AND”, vemos que a tecla CTRL não foi acionada no seu caso, porque o resultado deveria ser CTRL_DOWN_MASK (128), e 1040 & 128 == 0.
Não é para usar VK_CONTROL nesse caso.
Coloquei
if(evento.getModifiersEx() == InputEvent.CTRL_DOWN_MASK)
mas o valor do getModifiersEx() que me retornou foi 1152 e o valor do InputEvent.CTRL_DOWN_MASK é 128
Ops… meu código acima está incompleto. O certo é:
if(evento.getModifiersEx() & InputEvent.CTRL_DOWN_MASK == InputEvent.CTRL_DOWN_MASK)
O certo é:
if((evento.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) == InputEvent.CTRL_DOWN_MASK)
Em vez disso, você pode usar:
if ((evento.isControlDown())
que é muito mais simples. Que tal?
Como disse thingol, é preciso fazer um “E” binário para identificar se determinado modificador está ativo ou não.
Obrigado pela ajuda deu certo.
nao etendi o seguinte o que seria o evento??????
public void mouseClicked(MouseEvent e) {
if(evento.getModifiersEx() & InputEvent.CTRL_DOWN_MASK == InputEvent.CTRL_DOWN_MASK)
System.out.println("O control estava pressionado "
+ "enquanto clicou com o mouse");
if(evento.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK == InputEvent.SHIFT_DOWN_MASK):
System.out.println("O shift estava pressionado "
+ "enquanto clicou com o mouse");
if(evento.getModifiersEx() & InputEvent.ALT_DOWN_MASK == InputEvent.ALT_DOWN_MASK):
System.out.println("O alt estava pressionado "
+ "enquanto clicou com o mouse");
}
aqui deu nao pode achar a variavel evento
unica forma que eu encormtrei de fazer funcionar foi a seguinte
private void jRelatorio_ProdutoMouseClicked(java.awt.event.MouseEvent evt) {
if (evt.isControlDown())
System.out.println("O control estava pressionado "
+ "enquanto clicou com o mouse");
if (evt.isAltDown())
System.out.println("O ALT estava pressionado "
+ "enquanto clicou com o mouse");
if(evt.isShiftDown())
System.out.println("O shift estava pressionado "
+ "enquanto clicou com o mouse");
}
assim funciona perfeito
nao etendi o seguinte o que seria o evento?????? public void mouseClicked(MouseEvent e) { if(evento.getModifiersEx() & InputEvent.CTRL_DOWN_MASK == InputEvent.CTRL_DOWN_MASK) System.out.println("O control estava pressionado " + "enquanto clicou com o mouse"); if(evento.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK == InputEvent.SHIFT_DOWN_MASK): System.out.println("O shift estava pressionado " + "enquanto clicou com o mouse"); if(evento.getModifiersEx() & InputEvent.ALT_DOWN_MASK == InputEvent.ALT_DOWN_MASK): System.out.println("O alt estava pressionado " + "enquanto clicou com o mouse"); } aqui deu nao pode achar a variavel evento
É que evento, seria o objeto do tipo MouseEvent. Acontece que acima fizemos um exemplo com o objeto 'e' e outro com o objeto 'evento' (pode ter ficado confuso). Mas o jeito que você fez no seu segundo post está correto: chama o método getModifiersEx() do objeto MouseEvent (como citado acima, você pode usar o método isControlDown(), isAltDown(), e assim por diante).