0

I have just started learning java, and don't know much about GUI Components except for JFrame and JLayout.

How do I implement an object (ball) in a JFrame, and make it bounce of the walls infinite times?

Zaheer Ahmed
  • 28,160
  • 11
  • 74
  • 110
Abdul Moeed
  • 19
  • 1
  • 4
  • This question is much to broad and general for stackoverflow. Search for a tutorial or read a book on the subject. – Keppil Apr 13 '13 at 10:39
  • 1
    SO is not for asking how to do something you don't have any idea of how to do, it's for stuff you've researched and hit a wall. In that case, you show your code, error messages along with a description of what's happening. Then we can help you fix the problem – Ruan Mendes Apr 13 '13 at 10:40
  • Here's what google told me http://www.leepoint.net/notes-java/examples/animation/40BouncingBall/bouncingball.html – Ruan Mendes Apr 13 '13 at 10:42
  • See [Ball Animation in Swing](http://stackoverflow.com/questions/9800968/ball-animation-in-swing) and this [followup](http://stackoverflow.com/q/9849950/230513). – trashgod Apr 13 '13 at 10:58

2 Answers2

0

You can create it via swing with Thread concept

  • You can create ball by swing drawImage in swing concept

  • To do the moving and delaying concept you can use Thread pakage

To do this and all see the reference Java complete edition 7

kark
  • 4,763
  • 6
  • 30
  • 44
0

One approach is to add a subclass of JPanel with overridden paintComponent method to your JFrame. This class could have fields for the ball position and javax.swing.Timer for repainting the panel. It could be something like this (not tested):

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

class BouncingBall extends JPanel{
    //Ball position
    private int x = 0;
    private int y = 0;
    //Position change after every repaint
    private int xIncrement = 5;
    private int yIncrement = 5;
    //Ball radius
    private final int R = 10;

    private Timer timer;

    public BouncingBall(){
        timer = new Timer(25, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
               BouncingBall.this.repaint();
        }
         });

    timer.start();
   }

   @Override
   protected void paintComponent(Graphics g) {
       super.paintComponent(g);
       //If the ball hits one of the panel boundaries
       //change to the opposite direction
       if (x < 0 || x > getWidth()) {
           xIncrement *= -1;
       }
       if (y < 0 || y > getHeight()) {
           yIncrement *= -1;
       }
       //increment position
       x += xIncrement;
       y += yIncrement;
       //draw the ball
       g.fillOval(x - R, y - R, R * 2, R * 2);
   }
}
luke657
  • 826
  • 2
  • 11
  • 28