View Single Post
  #1 (permalink)  
Old 12-03-2007, 08:08 PM
adlb1300 adlb1300 is offline
Member
 
Join Date: Jul 2007
Posts: 46
adlb1300 is on a distinguished road
Problem deleting ball from bouncing ball app
I have a program that will create a new ball each time you click the add ball button adds a randomly colored ball to the window. Problem is I know want to create a button that will delete a ball when it is clicked. I have tried a number of things but to no avail. Below is the code I have and I was hoping someone could look it over and see if they can find what I'm missing.

Thanks

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_CLOSE); frame.setLocation(300,300); frame.setVisible(true); } }
Code:
import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.*; import javax.swing.*; 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, "Delete Ball", new ActionListener() { public void actionPerformed(ActionEvent evt) { delBall(); } }); addButton(buttonPanel, "Exit", new ActionListener() { public void actionPerformed(ActionEvent evt) { System.exit(0); } }); contentPane.add(buttonPanel, BorderLayout.SOUTH); } public void addButton(Container c, String title, ActionListener listener) { JButton button = new JButton(title); c.add(button); button.addActionListener(listener); } public void addBall() { BouncingBall b = new BouncingBall(canvas); canvas.add(b); BallThread thread = new BallThread(b); thread.start(); } public void delBall(){ BouncingBall db = new BouncingBall(canvas); canvas.delBall(db); } }
Code:
import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.*; import javax.swing.*; class BallCanvas extends JPanel { private ArrayList<BouncingBall> balls = new ArrayList<BouncingBall>(); 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); } } public void delBall(BouncingBall db) { balls.remove(db); } }
Code:
import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.*; import javax.swing.*; 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; private int dy; Color color; public BouncingBall(Component c) { canvas = c; color = getColor(); dx = getSpeed(); dy = getSpeed(); } public void draw(Graphics2D g2) { g2.setColor(color); g2.fillOval(x,y,15,15); // adds color to circle g2.drawOval(x,y,15,15); // 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); } private int getSpeed() { return 10 + (int)Math.floor(Math.random() * 4); } }
Code:
import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.*; import javax.swing.*; class BallThread extends Thread { private BouncingBall b; boolean keepBouncing = true; public BallThread(BouncingBall aBall) { b = aBall; } public void run() { try { while(keepBouncing){ // for (int i = 1; i <= 1000; i++) { b.move(); sleep(50); } } catch (InterruptedException exception) { keepBouncing = false; } } }
Reply With Quote
Sponsored Links