import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SimpleTrackMouse extends JPanel implements MouseListener, MouseMotionListener {
Display display; // Drawing surface, defined by nested class Display.
int mouse_x, mouse_y; // Position of the mouse.
String modifierKeys = ""; // If non-null, gives special keys that are held down.
String eventType = null; // If non-null, gives the type of the most recent mouse event.
public class Display extends JPanel {
// A nested class that defines the drawing surface of the applet.
// This simply displays the information contained in the main class
// instance variables mouse_x, mouse_y, modifierKeys, and eventType.
@Override
public void paintComponent(Graphics g) {
// Draw the panel, showing information about mouse events.
super.paintComponent(g); // Fills panel with background color.
g.setColor(Color.blue);
g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
g.drawRect(1, 1, getWidth() - 3, getHeight() - 3);
g.setColor(Color.red);
if (eventType == null) {
// If eventType is null, no mouse event has yet occurred
// on the panel, so don't display any information.
return;
}
g.drawString("Mouse event type: " + eventType, 6, 18);
if (modifierKeys.length() > 0)
g.drawString("Modifier keys: " + modifierKeys, 6, 34);
g.setColor(Color.black);
g.drawString("(" + mouse_x + "," + mouse_y + ")", mouse_x, mouse_y);
} // end of paintComponent()
} // end nested class Display
public SimpleTrackMouse() {
// Set background color and arrange for the applet to listen for mouse events.
display = new Display();
setLayout(new BorderLayout());
add(display);
display.setBackground(Color.white);
display.addMouseListener(this);
display.addMouseMotionListener(this);
}
void setInfo(MouseEvent evt) {
// set up the information about the event for display
mouse_x = evt.getX();
mouse_y = evt.getY();
modifierKeys = "";
if (evt.isShiftDown())
modifierKeys += "Shift ";
if (evt.isControlDown())
modifierKeys += "Control ";
if (evt.isMetaDown())
modifierKeys += "Meta ";
if (evt.isAltDown())
modifierKeys += "Alt";
display.repaint();
}
// Implement all the events of the MouseListener and MouseMotionListener
// interfaces. Each method sets eventType to record the type of event and
// calls the setInfo method to extract other information from the event
// for display.
@Override
public void mousePressed(MouseEvent evt) {
eventType = "mousePressed";
setInfo(evt);
}
@Override
public void mouseReleased(MouseEvent evt) {
eventType = "mouseReleased";
setInfo(evt);
}
@Override
public void mouseClicked(MouseEvent evt) {
eventType = "mouseClicked";
setInfo(evt);
}
@Override
public void mouseEntered(MouseEvent evt) {
eventType = "mouseEntered";
setInfo(evt);
}
@Override
public void mouseExited(MouseEvent evt) {
eventType = "mouseExited";
setInfo(evt);
}
@Override
public void mouseMoved(MouseEvent evt) {
eventType = "mouseMoved";
setInfo(evt);
}
@Override
public void mouseDragged(MouseEvent evt) {
eventType = "mouseDragged";
setInfo(evt);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("SimpleTrackMouse");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new SimpleTrackMouse());
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}