Non ho letto il tuo codice poichè lunghissimo ma io farei così:
creerei una JFrame e metterei al suo interno un JPanel inserendolo tramite un Container (che potresti ottenere tramite il metodo frame.getContentPane() )
Il panel che inserisco lo creo come oggetto di una classe apposita che estende appunto JPanel e andando a operare sul paintComponent(Graphics g) della classe del panel imposti l'immagine di sfondo tramite il metodo g.drawImage() (vedi le varie versioni del metodo,così scegli quale usare in base ai parametri da passare).Ora dopo aver impostato lo sfondo io utilizzerei un Timer (quello del package javax.swing) e sfruttando gli eventi generati dal timer operando un aumento/diminuzione di una variabile x che indichi la posizione e utilizzi il metodo g.drawString("nomeProgramma versione 1.0",x,y);
dove x verrà modificato creando l'animazione orizzontale,y lo imposti tu a tuo piacimento
questa in linea di massima è il procedimento da fare (almeno io farei e in passato ho fatto così),ciao![]()