MouseDetails.java

This class processes additional Mouse status information - like mouse clicks and which button was pressed.


MouseDetails.java

// MouseDetails.java
// Demonstrating mouse clicks and
// distinguishing between mouse buttons.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class MouseDetailsPanel extends JPanel {
   public JLabel statusBar;
   private String s = "";
   private int xPos, yPos;
   boolean first;

   public MouseDetailsPanel()
   {
       statusBar = new JLabel("Status");
       //add( statusBar, BorderLayout.SOUTH );
       first = true;

      addMouseListener( new MouseClickHandler() ); 
   }

   public void paintComponent( Graphics g )
   {
       super.paintComponent(g);
      if (!first) g.drawString( "Clicked @ [" + xPos + ", " + yPos + "]",
                    xPos, yPos );
      first = false;
   }


   // inner class to handle mouse events
   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() )      // Right mouse button
            s += " with right mouse button";
         else if ( e.isAltDown() )  // Middle mouse button
            s += " with center mouse button";
         else                       // Left mouse button
            s += " with left mouse button";

         statusBar.setText( s ); 
         repaint();
      }
   }

   public static void main( String args[] )
   {
       EventQueue.invokeLater(new Runnable()
       {
	   public void run()
	   {
	       MouseDetails app = new MouseDetails();
	   }
       });
   }
}

class mainThread implements Runnable
{
    public void run()
    {
	MouseDetailsPanel panel = new MouseDetailsPanel();
	JFrame frame = new JFrame("Mouse clicks and buttons" );
	frame.add(panel.statusBar,BorderLayout.SOUTH);
	frame.add(panel);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setSize( 360, 240 );
	frame.setVisible(true);
    }
}


public class MouseDetails
{
/*
    public void init()
    {
	EventQueue.invokeLater(new Runnable()
	{
	    public void run()
	    {
		MouseDetailsPanel panel = new MouseDetailsPanel();
		add(panel);
		add(panel.statusBar,BorderLayout.SOUTH);
	    }
	});
    }
*/

    public static void main( String args[] )
    {
	EventQueue.invokeLater(new mainThread());
    }
}



Maintained by John Loomis, updated Sun Feb 17 19:11:33 2019