Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Flávio Gomes

Distingüindo botões do Mouse

Recommended Posts

Estou tentando executar o código-exemplo abaixo, mas ele não funciona. O fonte é compilado direitinho. Não tem mensagens de erro. O Frame aparece, mas quando eu clico, ele não mostra o texto na janela nem muda a barra de títulos.// Demonstrando os cliques do mouse e// distinguindo entre os botões do mouse.import javax.swing.*;import java.awt.*;import java.awt.event.*;public class MouseDetails extends JFrame { private String s = ""; private int xPos, yPos; public MouseDetails() { super( "Mouse clicks and buttons" ); addMouseListener( new MouseClickHandler() ); setSize( 350, 150 ); show(); } public void paint( Graphics g ) { g.drawString( "Clicked @ [" + xPos + ", " + yPos + "]", xPos, yPos ); } public static void main( String args[] ) { MouseDetails app = new MouseDetails(); app.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } // classe interna para tratar eventos de mouse private class MouseClickHandler extends MouseAdapter { public void MouseClicked( MouseEvent e ) { xPos = e.getX(); yPos = e.getY(); String s = "Clicked " + e.getClickCount() + " time(s)"; if ( e.isMetaDown() ) // Botão direito do mouse s += " with right mouse button"; else if ( e.isAltDown() ) // Botão do meio do mouse s += " with center mouse button"; else s += " with left mouse button"; setTitle( s ); // configura a barra de título da janela repaint(); } }}

Compartilhar este post


Link para o post
Compartilhar em outros sites

if ( e.isMetaDown() ) // Botão direito do mouse

s += " with right mouse button";

else if ( e.isAltDown() ) // Botão do meio do mouse

s += " with center mouse button";

Olá Flávio.

 

Onde você viu que os métodos isMetaDown() e isAltDown() distinguem entre o botão direito e o botão do meio do mouse?

Pelo que eu vi, na documentação oficial sobre a classe MouseEvent, para distinguir o botão do mouse que foi pressionado você deve fazer algo assim:

 

int pressedButton = e.getButton();

switch(pressedButton) {

case MouseAdapter.BUTTON1:

s+= " with left mouse button";

break;

 

case MouseAdapter.BUTTON2:

s+= " with right mouse button";

break;

 

default:

s+= " with middle mouse button?";

break;

 

}

 

Se não me engano isAltDown() e isMetaDown verificam se você estava pressionando a tecla Alt (ou meta, se estiver usando um teclado de Mac) quando clicou.

 

Qualquer dúvia poste de novo. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz a alteração conforme indicado. A classe interna ficou assim:// classe interna para tratar eventos de mouse private class MouseClickHandler extends MouseAdapter { public void MouseClicked( MouseEvent e ) { xPos = e.getX(); yPos = e.getY(); String s = "Clicked " + e.getClickCount() + " time(s)"; // Botão direito do mouse if ( e.getButton() == MouseAdapter.Button2 ) s += " with right mouse button"; // Botão do meio do mouse else if ( e.getButton() == MouseAdapter.Button1 ) s += " with left mouse button"; else s += " with center mouse button"; setTitle( s ); // configura a barra de título da janela repaint(); } }Mas ao compilar, aparecem as seguintes mensagens:MouseDetails2.java:52: cannot resolve symbolsymbol : variable Button2location: class java.awt.event.MouseAdapter if ( e.getButton() == MouseAdapter.Button2 ) // BotÒo direito do mouse ^MouseDetails2.java:54: cannot resolve symbolsymbol : variable Button1location: class java.awt.event.MouseAdapter else if ( e.getButton() == MouseAdapter.Button1 )// BotÒo do meio do mouse ^2 errors

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é porque você escreveu a constante BUTTON1 como Button1. Não se esqueça: java faz diferença entre maiúsculas e minúsculas.VAriavel, vAriavel, VARIAVEL e variavel são interpretadas como 4 variáveis distintas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hoje descobri outra forma de descobrir qual botão foi pressionado...

 

public void MouseClicked(MouseEvent e) {	if( SwingUtilities.isLeftMouseButton(e) ) {		System.out.println("With left mouse button");	} else if( SwingUtilities.isRightMouseButton(e) ) {		System.out.println("With right mouse button");	} else if( SwingUtilities.isMiddleMouseButton(e) ) {		System.out.println("With middle mouse button");	} else {		System.out.println("Unknown button pressed");	}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.