Detectar evento com ctrl + clique do mouse

12 respostas
E

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.

12 Respostas

M

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.

E

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.

M

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;
	}
    }
T

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.

E

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

M

Ops… meu código acima está incompleto. O certo é:

if(evento.getModifiersEx() & InputEvent.CTRL_DOWN_MASK == InputEvent.CTRL_DOWN_MASK)
T

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?

M

Como disse thingol, é preciso fazer um “E” binário para identificar se determinado modificador está ativo ou não.

E

Obrigado pela ajuda deu certo.

fabiodurgante
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
fabiodurgante
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
M
fabiodurgante:
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).

Criado 6 de janeiro de 2009
Ultima resposta 7 de jan. de 2009
Respostas 12
Participantes 4