Usually you don't have to create every graphical object from scratch at every iteration, you can initialize them at startup and then just change their properties when needed.
However your code is fine, because what you draw is entirely dynamic and really needs to be re-created at every iteration.