Метод рисования компонента вызывается, когда свинг определяет, что его нужно перекрасить.
Так что, вероятно, происходит то, что paint () вызывается, как только Frame создается и отображается. На этом этапе цвет графики оказывается черным.
Затем вы устанавливаете цвет и вызываете «drawRect» для графического объекта. Ничего не происходит, потому что вы не в методе рисования. В какой-то момент в будущем Swing определяет необходимость перекрасить фрейм и вызывает его метод с недавно инициализированным графическим объектом. Это цвет по умолчанию черный. Вы получите еще один черный прямоугольник.
Решение состоит в том, чтобы добавить поле к вашему объекту Fr. "rectangleColor", например. Ваш JColorChooser должен обновить это поле. Когда вызывается рисование Fr, оно должно ссылаться на это свойство для установки цвета графики.
Если вы хотите заставить компонент перерисовывать себя, вы должны вызвать для него метод repaint ().
Наконец, нет смысла устанавливать gr = getGraphics()
. У вас уже есть инициализированный объект Graphics, переданный вам в методе рисования.