Я бы, вероятно, использовал JPanel в качестве дочернего элемента вашего более крупного компонента, который формирует холст. JPanel, поскольку он является подклассом JComponent, позволяет вам как добавлять слушателя мыши с помощью addMouseListener()
, так и переопределять его paintComponent
() метод.
Если вы хотите переместить квадрат, просто переместите JPanel.
(в этом случае, если это квадрат или прямоугольник, вам даже не нужно переопределять paintComponent, вы можете просто сделать это с помощью соответствующих вызовов setBorder и setBackground.)
Другим подходом может быть использование JPanel в качестве всего холста, переопределение paintComponent для рисования чего угодно, addMouseListener на JPanel, а затем ручное определение того, происходят ли события прослушивателя мыши в геометрии вашего графического элемента.