There are several styles for using the mouse listeners.
They
are usually added to a graphics panel with a paintComponent method.
Listening within the panel itself
Following example code demonstrates more.
It is common to have a panel listen to its own events. For example,
class DrawingPanel extends JPanel implements MouseListener{
public DrawingPanel() { // Constructor
this.addMouseListener(this);
. . .
}
public void paintComponent(Graphics g) {
. . .
}
. . .
public void mousePressed(MouseEvent e) {. . .}
public void mouseReleased(MouseEvent e) {. . .}
public void mouseClicked(MouseEvent e) {. . .}
. . .
}
It can communicate changes with the outside by (1) making it a subclass,
(2) supplying getter methods,
or (3) supplying a "model" object to the constructor.
public class MyClass implements MouseListener {
. . .
DrawingPanel drawing = new DrawingPanel();
drawing.addMouseListener(this);
. . .
public void mousePressed(MouseEvent e) {. . .}
public void mouseReleased(MouseEvent e) {. . .}
public void mouseClicked(MouseEvent e) {. . .}
. . .
}
class DrawingPanel extends JPanel {
public void paintComponent(Graphics g) {
. . .
}
. . .
}
This requires setter methods in the DrawingPanel
class so that what is drawn can be changed.
Or a constructor for DrawingPanel could be passed an
object for the "model" that would allow it to get values
needed by paintComponent.
p.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
}
});