Никогда, никогда не звоните paintComponent
напрямую, ни у какого внешнего источника нет причин для этого.Кроме того, что бы вы сделали, если бы вы передали его null
?
Начните с изучения Выполнение пользовательской живописи и Рисование в AWT и Swing чтобы лучше понять, как работает рисование в Swing.
API Swing в основном использует модель делегата, где система делегирует ответственность за рисование каждого компонента компоненту.Это достигается за счет того, что система вызывает метод paint
компонентов, который, в свою очередь, вызывает (среди нескольких других) paintComponent
.
. Swing также использует подход пассивного рендеринга, что означает, что рисование происходит по усмотрениюсистемы окраски.Ваш компонент уведомляется о необходимости, когда вызывается его метод рисования.Это может произойти в любое время.
Чтобы компонент был окрашен, его сначала нужно добавить в контейнер, который реализован на экране (имеет собственный узел), в большинстве случаев это означает, чтоиерархия компонентов должна быть преобразована в некоторый оконный класс, такой как JFrame
.
Итак, ответ на ваш вопрос:
- Прочитайте приведенную выше документацию (и получителучшее понимание того, как работает API)
- Добавьте ваш
GameBoard
в контейнер, который может быть преобразован в оконный класс - Никогда не вызывайте
paint
или paintComponent
напрямую
Отражение ....
private mainWindow view;
private mainModel model;
public GameBoard(mainModel m, mainWindow v)
{
view = v;
model = m;
}
Для меня это не имеет смысла.Нет никаких разумных причин, по которым GameBoard
нужна ссылка на mainWindow
.GameBoard
сам по себе является «представлением».Во всяком случае, единственное, что вы «должны» передать GameBoard
(при условии, что вы пытаетесь использовать MVC), это контроллер