display.add(drawRec);
display.repaint();
Когда вы добавляете (или удаляете) компоненты к видимому фрейму, тогда основная логика такова:
display.add(...);
display.revalidate();
display.repaint(); // sometimes needed
revalidate()
- это ключевой метод, потому что он вызывает менеджер компоновки, поэтому размер/ расположение компонента может быть задано.
Однако это все равно не решит проблему, потому что ваша пользовательская панель не имеет предпочтительного размера, поэтому нечего рисовать для вашего компонента.
Вам необходимо переопределить метод getPreferredSize()
вашей пользовательской панели, чтобы вернуть предпочтительный размер вашего пользовательского компонента. Так что в вашем случае вы можете установить предпочтительный размер (220, 220), чтобы прямоугольник центрировался на панели.
Прочтите раздел из учебника по Swing на Custom Painting , чтобы узнать большеинформация и полные рабочие примеры.
Примечание: пример учебника также покажет вам, как лучше структурировать ваш код, чтобы убедиться, что GUI создан в потоке диспетчеризации событий.