Я делаю что-то очень похожее в частном проекте, над которым я работаю. До сих пор я сгенерировал изображения до 1024x1024 без каких-либо проблем (кроме памяти) и может отображать их очень быстро и без каких-либо проблем с производительностью.
Переопределение метода рисования подкласса JPanel является излишним и требует больше работы, чем вам нужно.
Как я это делаю:
Class MapIcon implements Icon {...}
ИЛИ
Class MapIcon extends ImageIcon {...}
Код, который вы используете для создания изображения, будет в этом классе. Я использую BufferedImage для рисования, а затем, когда вызывается paintIcon (), используйте g.drawImvge (bufferedImage); Это уменьшает количество мигания, выполняемое во время создания изображений, и вы можете его нарезать.
Далее я расширяю JLabel:
Class MapLabel extends Scrollable, MouseMotionListener {...}
Это потому, что я хочу поместить свое изображение на панель прокрутки, I.e. отобразите часть изображения и попросите пользователя прокрутить по мере необходимости.
Итак, я использую JScrollPane для хранения MapLabel, который содержит только MapIcon.
MapIcon map = new MapIcon ();
MapLabel mapLabel = new MapLabel (map);
JScrollPane scrollPane = new JScrollPane();
scrollPane.getViewport ().add (mapLabel);
Но для вашего сценария (просто покажите все изображение каждый раз). Вам необходимо добавить MapLabel в верхнюю часть JPanel и убедиться, что все они будут отображаться до полного размера изображения (путем переопределения GetPreferredSize ()).