Assist a Beginner's Breakout Code

Hi everyone, I'm new to Java and to this forum. I've been following along with Stanford's CS106A class online, and wrote the code below (except the imports and constants, which were given by the professor) as part of assignment 3. But this isn't homework; there's no grades or credit. So I'm not looking for an easy answer, only to learn the fundamentals of Java.

Below is my attempt at the "Breakout" game. It meets the requirements as set by the professor, with one notable bug. Sometimes when the paddle collides with the ball, or the ball with the paddle at some angles, the ball's y-direction seems to change back and forth rapidly, instead of changing once and heading back toward the bricks. It looks like the ball is "stuck" to the paddle for a short amount of time. I believe this happens because my test for a collision checks the four "corners" of the ball -- I believe different corners are hitting the paddle at different times and switching the balls y-direction rapidly. What is the best way to prevent this behavior? Is there a way to make my checkCollision() method inactive for a short amount of time after the last collision?

More generally, can someone with experience take a look at the code below and give me feedback on how it can be improved? How can this code be more structured, more logical, more readable, better commented? (Likewise, how can this post be more usefully written?) Any feedback is appreciated.

My intent here is to get some feedback on my work below, and to create a thread that allows future CS106A online followers to compare their code to other products and your expert comments to see how and where I/they could have done better.

/* Shifts paddle according to x-coordinate of mouse when the cursor is in the window
* Sets paddle to far left of gamespace if cursor is left of window
* Sets paddle to the far right of gamespace if cursor is right of the window
*/
public void mouseMoved(MouseEvent e){
paddle.move((e.getX()-paddle.getX()) - PADDLE_WIDTH / 2, 0);