Es ist nicht unbedingt nötig, dass du bei einem JPanel die paintComponent bzw. paint-Methode überschreibst, um Bilder zu zeichnen.
Es reicht meistens aus, wenn du "kein" Layout (swing nutzt afaik standardmäßig das FlowLayout, gemeint ist also null) benutzt.
Das kannst du wie folgt machen:
Setze das Layout des JPanel auf null, statt auf "new FlowLayout".
Komponenten (JLabel, JButton usw.) initialisieren und mit der Methode setBounds(int x,int y, int width, int height) der Komponente die genaue Position und Ausmaße festlegen.
Komponenten nach der Zeichenreihenfolge (erstes ganz unten, letztes ganz oben) dem JPanel per add(Component component) hinzufügen.
PS: Ein Bild gezeichnet kriegt man am besten über JLabel hin, dass du wie folgt initialisierst: