Смертельно добавлять свой mouselistener в метод paint (), так как этот метод вызывается очень очень часто (с каждым перекрашиванием), и добавляется так много слушателей (с каждым перекрашиванием).
Вы должны добавить слушателя к вашей панели контента, а не к самому JFrame. Это сделает это. Вы можете сделать это в конструкторе вашего класса:
public CircleDraw() {
this.getContentPane().addMouseListener(this);
}
Я думаю, это не решит вашу проблему полностью, поскольку вы не нажмете мышку, пока активен метод рисования. Ваш дизайн кода (особенно ваш цикл while) не дает времени на запуск других событий. Таким образом, событие mouseclick будет обрабатываться после 20 ваших циклов. Вы можете проверить это, добавив
public void mouseClicked(MouseEvent evt) {
mousex = evt.getX();
mousey = evt.getY();
System.out.println("X: "+mousex+"/ Y: "+mousey);
}
к вашему коду. Вы должны запустить свой графический интерфейс в другом потоке (например, использовать SwingUtilities и Runnable () для этого). Я рекомендую вам получить хорошую книгу о разработке JAVA. Или вы можете начать с онлайн-уроков, таких как этот .
ИМХО, вы не должны пытаться иметь дело с awt, вместо этого используйте SWING или SWT для GUI-дизайна, так как это намного удобнее.