Взаимодействие с объектом Graphics
должно быть ограничено методом paintComponent
.
Да, это проблема с потоками, но не совсем так, как вы думаете.
Все рисование выполняется в методе paint()
компонента, который вызывает paintBackground
, paintBorder
и paintComponent
. Вместо рисования области в событии обработчика мыши, вам нужно установить флаг и вызвать repaint()
на панели или компоненте, на котором вы хотите нарисовать это.
Внутри этого компонента перезаписать метод paintComponent
. Позвоните super.paintComponent()
и нарисуйте, что хотите, когда флаг установлен.
Когда вы вызываете repaint()
на панели, он помечает компонент, который будет окрашен. Затем метод paintComponent()
будет вызван в следующий раз, когда поток обработки событий отобразит этот компонент. Это добавит ваш прямоугольник к вершине.