rect = новый прямоугольник (20, 20, 30, 30);
Вторая проблема заключается в том, что ваш компонент не имеет предпочтительного размера. Ваш компонент отображается в простой рамке, потому что вы добавляете компонент в центр BorderLayout, поэтому предпочтительный размер компонента игнорируется. Однако это не будет работать, если вы попытаетесь использовать компонент при использовании других менеджеров компоновки.
Вам также следует переопределить метод getPreferredSize (), чтобы вернуть предпочтительный размер вашего компонента при минимуме, который вам необходимо использовать:
return new Dimension(50, 50);
для размещения размера и расположения нарисованного прямоугольника.