Empezando con diseñar un componente subclase de JPanel que permita visualizar la bola y la barra
debes sobreescribir el metodo paintComponent(java.awt.Graphics gc) para tomar el control del renderizado
Crea una clase que servirá de superclase de bola y de barra (ObjetoGrafico por ejemplo) que mantendria como variables posicion (Un point2D o dos float) que mantendran la posicion de el objeto, tamaño con la longitud en x y en y,posicion anterior ,que mantendrá la ultima posicion ocupada,un boolean , que es true si el ultimo movimiento fue en x o false si fue en y,(tiene que ver con las colisiones), y vectorVelocidad, un Point2D o dos float que representa la velocidad actual del objeto.
Ademas del constructor y los get/set, necesitaras un metodo que actualice el objeto, lo mueva a su nueva posicion y otro metodo para determinar si este colisiona con otro objeto pasado como parametro(retorna boolean) la clase Rectangle2D te servirá para probar colisiones
ademas un metodo colision con que se anulará en subclase para definir el comportamiento ante una colision
y un metodo para dibujar el objeto, que recibiria como parametro un Graphics sobre el que dibujar
ademas una clase que gestione los objetos(Universo)que mantendria una lista de objetos graficos,y un metodo para actualizarlos, que itere sobre los objetos que contiene y luego probaria las colisiones, algo asi
for(ObjetoGrafico obj : ElUniverso){
obj.actualizar();
for (ObjetoGrafico otro : ElUniverso){
if(obj.colisionaCon(otro)){
obj.hayColision(otro);
}
}
}
el metodo actualizar seria asi
public void actualizar(){
if(ultimoEnX){
posicionAnterior=posicion.clone();
posicion.y+=vectorVelocidad.y;
ultimoEnX =true;
}else{
posicion.y+=vectorVelocidad.y;
ultimoEnX=false;
}
este metodo mueve el objeto alternativamente en x y en la siguiente llamada en yx ya veras para que
el metodo hay colision esta en blanco en esta clase
el metodo de dibujo husaria el metodo fillRect(int x,int y,int width,int height) para dibujar un rectangulo con la posicion y tamqño del objeto
Una subclase Bola representaria la pelota,el vectorVelocidad se crearia con valores aleatorios, y el metodo hayColision seria asi
public void hayColision(ObjetoGrafico otro){
posicion=ultimaPosicion;
if(ultimoEnX){
vectorVelocidad.x=-vectorVelocidad.x;
}else{
vectorVelocidad.y=-vectorVelocidad.y;
}
}
el efecto conseguido es que al ocurrir una colision se retorna el objeto a la posicion anterior,y se comprueba el ultimo movimiento, si fue en x el valor x de velocidad se invierte, en caso contrario se invierte y, esto consigue el efecto de rebote.
el metodo de dibujo simplemente usaria el metodo fillOval(int x,int y,int width,int height)de Graphics para dibujar la bola
empieza intentando eso,coloca un objeto bola encerrado entre cuatro ObjetoGrafico y ve si se comporta como quieres, ahora no tengo a mano una PC, luego puedo darte codigo mas completo