Hola, gracias por contestar, no el proyecto lo tenia sin s, pero para ponerlo aquí me equivoque.
Mira al final lo he conseguido, estuve leyendo cursos por internet y vi que al ser un JFrame lo tenia que hacer con Canvas y no con JPanel, y con el metodo paint en vez del paintComponent. Así me funciono sin ningún problema. Me funciona bien con public, al igual que con protected.
He estado haciendo cambios en el código y por probar cambie el Canvas por JPanel y el paint por paintComponent y ahora me funciona todo perfecto, ya que los gráficos al mover se ven mejor en el paintComponent que en paint.
Mira al final lo he conseguido, estuve leyendo cursos por internet y vi que al ser un JFrame lo tenia que hacer con Canvas y no con JPanel, y con el metodo paint en vez del paintComponent. Así me funciono sin ningún problema. Me funciona bien con public, al igual que con protected.
He estado haciendo cambios en el código y por probar cambie el Canvas por JPanel y el paint por paintComponent y ahora me funciona todo perfecto, ya que los gráficos al mover se ven mejor en el paintComponent que en paint.