Ok, so I made a simple applet that has a blue ball that bounces around an applet. When the ball encounters the bounds of the applet it bounces appropriately. However, I have a few kinks to work out that I'm a little puzzled about.
FYI, double buffering isn't one of those kinks- I'll fix that a little later since it's not that important in my opinion.

Here's the problem:
If my ball's position is incremented/decremented with an incrementation of 1, than I can easily detect when the ball collides into a wall. However, if my incrementation is, say, by a number 3 or 5, etc the ball will be detected when it encounters the bounds of the applet but will also have 'slipped' a little bit past the bounds of the applet. It 'slips' far enough to be noticeable by the user.

If I keep my increment number @ 1 than my timer that constantly calls repaint for the applet will have to have a very short delay like 10 or something for the ball to move at what I deem an appropriate speed. To remedy this I can increase my increment number but then I will run into the problem mentioned above.

Here's the code. Thanks for the input.

HTML Code:
/*
 *Ball Class
 *Ball.java
 */

import java.awt.*;

public class Ball{
	private int xPos;
	private int yPos;
	//speed at which balls coord's are incremented/decremented
	private int xIncr = 3;
	private int yIncr = 3;
	private Color col;
	final int size = 25;
	//size of Applet: 300 x 400
	static final int WIDTH = 300;
	static final int HEIGHT = 400;

	public Ball(int x, int y, Color color){
		xPos = x;
		yPos = y;
		col = color;
	}
	
	public Ball(){
		//starting position
		this(150,150,Color.blue);
	}
	
	public int getXPos(){
		return xPos;
	}
	
	public int getYPos(){
		return yPos;
	}
	
	public void checkBounce(){
		System.out.println("checkBounce");
		if(xPos < 0 || xPos > WIDTH - size){
			//ball hit left or right of applet
			this.reverseX();
		}
		
		if(yPos < 0 || yPos > HEIGHT - size){
			//ball hit top or bottom of applet
			this.reverseY();
		}
	}
	
	public void reverseX(){
		//debugging print statement
		System.out.println("reverseX");
		xIncr = (-1)* xIncr;
	}
	
	public void reverseY(){
		//debugging print statement
		System.out.println("reverseY");
		yIncr = (-1)* yIncr;
	}
	
	public void moveBall(Graphics g){
		checkBounce();
		g.setColor(col);
		g.fillOval(xPos, yPos, size, size);
		xPos += xIncr;
		yPos += yIncr;
		System.out.println("(" + xPos + " , " + yPos + ")");
	}
}
HTML Code:
/*
 *Main class
 *Main.java
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Main extends JApplet implements ActionListener{
	Ball ball;
	Timer timer;
	final int DELAY = 50;
	
	public void init(){
		//set background color
		this.setBackground(Color.black);
		//this.setBackground(new Color(100,0,100));
		//use default constructor for test
		ball = new Ball();
		//constructor Timer(int millidelay, ActionListener l)
		timer = new Timer(DELAY, this);
		repaint();
	}
	
	public void start(){
		timer.start();
	}
	
	public void stop(){
		timer.stop();
	}
	
	public void destroy(){
		//System.exit(0);
	}
	
	public void paint(Graphics g){
		super.paint(g);
		ball.moveBall(g);
	}
	
	public void actionPerformed(ActionEvent e){
		if(e.getSource() == timer){
			//call paint method
			repaint();
		}
	}
}