I suppose you're on the good way, but you need to know a thing or 2 about a game's technical architechture. The way you're approaching how to make a game is a common beginners mistake so to speak, i started exactly the same way

First, just don't make it difficult for yourself by using threads, and second, you dont want to use Timer stuff.
The point with using repaint(), is that its not an order to java to repaint, but actually a request, which java will answer to when the jvm has the time to comply. Therefor you will have to take these matters into your own hand. Where you want to go, is to a general so called main loop where you check and process your input, and render your graphics every pass, which is normally called a frame. A basic mainloop looks a bit like this;
1 2 3 4 5 6 7
| public void mainLoop() { while(running) { handleInput(); doMovement(); drawFrame(); } } |
You would also go for accelerated graphics. This allows to prepare the next batch of graphics while the current is being displayed basicly, and it wil help on creating more fluency in movement.
What youd best go from here, is prolly to read
Kevin Glass his Space Invaders Tutorial, where every aspect is explained a bit better

You could also read the book "Killer Game Programming In Java".