Results 1 to 2 of 2
  1. #1
    adlb1300 is offline Member
    Join Date
    Jul 2007
    Posts
    46
    Rep Power
    0

    Default Bouncing Ball Just Suddenly Stops Mid Bounce

    I have a application where each time you click the add ball button a new randomly colored ball is added to the jpanel. It works fine except that the balls suddenly stop at the same spot. I want them to continue to bounce for a longer period of time instead of like 8 bounces. It was going around without stopping prior to my getting the add new ball part working. I cannot seem to figure out what I did wrong. Also curious if anyone new of a tip as to how to get the balls to disappear once a button is clicked or their cycle runs out. Below is my code:

    Java Code:
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.util.*;
    import javax.swing.*;
     
    public class BounceBall{
        
        public static void main(String[] args) {
            
            JFrame frame = new BounceFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS  E);
            frame.setVisible(true);
        }
    }
     
    class BounceFrame extends JFrame {
     
        private BallCanvas canvas;
        public static final int WIDTH = 450;
        public static final int HEIGHT = 350;
     
        
        public BounceFrame() {
            setSize(WIDTH, HEIGHT);
            setTitle("BounceThread");
            
            Container contentPane = getContentPane();
            canvas = new BallCanvas();
            contentPane.add(canvas, BorderLayout.CENTER);
            JPanel buttonPanel = new JPanel();
            addButton(buttonPanel, "Add Ball",
                    new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    addBall();
                }
            });
            
            addButton(buttonPanel, "Exit",
                    new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    System.exit(0);
                }
     
    class BallThread extends Thread {
        
        private BouncingBall b;
        
        public BallThread(BouncingBall aBall) { b = aBall; }
        
        public void run() {
            try {
                for (int i = 1; i <= 1000; i++) {
                    b.move();
                    sleep(5);
                }
            } catch (InterruptedException exception) {
            }
        }
        
    }
     
    class BallCanvas extends JPanel {
     
        private ArrayList balls = new ArrayList();
        
        public void add(BouncingBall b) {
            balls.add(b);
        }
        
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            for (int i = 0; i < balls.size(); i++) {
                BouncingBall b = (BouncingBall)balls.get(i);
                b.draw(g2);
            }
        }
    }
     
    class BouncingBall {
        
        private Component canvas;
        private static final int XSIZE = 15;
        private static final int YSIZE = 15;
        private int x = 0;
        private int y = 0;
        private int dx = 2;
        private int dy = 2;
        
        public BouncingBall(Component c) { canvas = c; }
        
        Color color = getColor();
        
        public void draw(Graphics2D g2) {
            
            g2.setColor(color); 
            g2.fillOval(x,y,30,30);   // adds color to circle
            g2.drawOval(x,y,30,30);   // draws circle
            
        }
        
        public void move() {
            x += dx;
            y += dy;
            if (x < 0) {
                x = 0;
                dx = -dx;
            }
            if (x + XSIZE >= canvas.getWidth()) {
                x = canvas.getWidth() - XSIZE;
                dx = -dx;
            }
            if (y < 0) {
                y = 0;
                dy = -dy;
            }
            if (y + YSIZE >= canvas.getHeight()) {
                y = canvas.getHeight() - YSIZE;
                dy = -dy;
            }
            
            canvas.repaint();
        }
        
        private Color getColor() {
            int rval = (int)Math.floor(Math.random() * 256);
            int gval = (int)Math.floor(Math.random() * 256);
            int bval = (int)Math.floor(Math.random() * 256);
            return new Color(rval, gval, bval);
       }
        
        }
    Thanks

  2. #2
    adlb1300 is offline Member
    Join Date
    Jul 2007
    Posts
    46
    Rep Power
    0

Similar Threads

  1. Multiple bouncing balls
    By Algar in forum AWT / Swing
    Replies: 2
    Last Post: 04-24-2008, 08:35 PM
  2. bouncing ball issue
    By adam405 in forum New To Java
    Replies: 1
    Last Post: 03-18-2008, 03:48 AM
  3. How do I make My ball to move randomly?
    By whdbstjr90 in forum New To Java
    Replies: 4
    Last Post: 12-31-2007, 05:32 PM
  4. Problem deleting ball from bouncing ball app
    By adlb1300 in forum New To Java
    Replies: 2
    Last Post: 12-03-2007, 09:08 PM
  5. Replies: 2
    Last Post: 12-01-2007, 07:48 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •