Button to increase or decrease the number of the balls

Assignment Help JAVA Programming
Reference no: EM13167861

Simulates a bouncing ball. Extend to allow mulitple balls. You can use the +I or -I button to increase or decrease the number of the balls and use teh Suspend and Resume buttoms to freeze the balls or resume bouncing. For each ball, assign a random color.

I am having trouble getting my program to run. Here is what I came up with:

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.concurrent.locks.*;
import javax.swing.*;
import javax.swing.border.LineBorder;

public class BouncingBalls extends JApplet {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
JFrame frame = new JFrame();
JApplet applet = new BouncingBalls();

frame.add(applet);

frame.setTitle("BouncingBalls");

frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setDefaultCloseOperation(3);

frame.setSize(400,200);
frame.setVisible(true);
}
public BouncingBalls()
{

add(new BallControl());
}
class BallControl extends JPanel implements ActionListener, AdjustmentListener
{
private Ball ball;
private JButton jbtSuspend;
private JButton jbtResume;
private JButton jbtAdd;
private JButton jbtSubtract;
private JScrollBar jsbDelay;

public BallControl()
{
ball = new Ball();

jbtSuspend = new JButton("Suspend");

jbtResume = new JButton("Resume");

jbtAdd = new JButton("+1");


jbtSubtract = new JButton("-1");
jsbDelay = new JScrollBar();
JPanel panel = new JPanel();

panel.add(jbtSuspend);

panel.add(jbtResume);

panel.add(jbtAdd);

panel.add(jbtSubtract);

ball.setBorder(new LineBorder(Color.red));
jsbDelay.setOrientation(0);
ball.setDelay(jsbDelay.getMaximum());
setLayout(new BorderLayout());
add(jsbDelay, "North");
add(ball, "Center");
add(panel, "South");
jbtSuspend.addActionListener(this);
jbtResume.addActionListener(this);
jbtAdd.addActionListener(this);
jbtSubtract.addActionListener(this);
jsbDelay.addAdjustmentListener(this);
}


class Ball extends JPanel implements Runnable
{

class BallState
{
int x;

int y;
int dx;
int dy;
Color color;

public BallState()
{
x = 0;
y = 0;
dx = 2;
dy = 2;

int r = (int)(Math.random() * 1000) % 256;
int g = (int)(Math.random() * 1000) % 256;
int b = (int)(Math.random() * 1000) % 256;

color = new Color(r,g,b);
}
}
public void add()
{
list.add(new BallState());
}
public void subtract()
{
if(list.size() > 0)
list.remove(list.size() - 1);
}
protected void paintComponent (Graphics g)
{
super.paintComponent(g);

for(int i = 0; i < list.size(); i++);
{
BallState ball;
ball = (BallState)list.get(i);
if(ball.x < radius) ball.dx = Math.abs(ball.dx);
if(ball.x > getWidth() - radius) ball.dx = -Math.abs(ball.dx);
if(ball.y < radius) ball.dy = Math.abs(ball.dy);
if(ball.y > getHeight() - radius) ball.dy = -Math.abs(ball.dy);

ball.x += ball.dx;
ball.y += ball.dy;
g.setColor(ball.color);
g.fillOval(ball.x - radius, ball.y - radius, radius*2, radius*2);
}
}
public void run()
{
try
{
while(true)
{
while(!isSuspended)
{
repaint();
Thread.sleep(speed);
}
lock.lock();
suspended.await();
lock.unlock();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}

public void resume()
{
lock.lock();
isSuspended = false;
suspended.signalAll();
lock.unlock();
}
public void suspend()
{
lock.lock();
isSuspended = true;
lock.unlock();
}

public void setDelay(int ms)
{
speed = ms;
}
private int speed;
protected Thread timer;
private ArrayList list;
private int x;
private int y;
private int radius ;
private int dx;
private int dy;
boolean isSuspended;
Lock lock;
Condition suspended;

public Ball()
{
speed = 10;
timer = new Thread(this);
list = new ArrayList();
x = 0;
y = 0;
radius = 5;
dx = 2;
dy = 2;
isSuspended = false;
lock = new ReentrantLock();
suspended = lock.newCondition();
timer.start();
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jbtSuspend) ball.suspend();
else
if(e.getSource() == jbtResume) ball.resume();
else
if(e.getSource() == jbtAdd) ball.add();
else

if(e.getSource() == jbtSubtract) ball.subtract();
}
public void adjustmentValueChanged(AdjustmentEvent e)
{
ball.setDelay(jsbDelay.getMaximum() - e.getValue());
}
}

}

 

 

Reference no: EM13167861

Questions Cloud

Logic circuit to figure out how many of the bits : Design a logic circuit to figure out how many of the bits in a 6 bit unsigned number equal 1. Design the simplest possible circuit to accomplish this.
How much of that total is interest : How much do you need to invest today to have $500,000 30 years in the future and how much of that total is interest?
Prove that p(y|x=x)~bin(n-x,b/1-a) : Prove that p(y|X=x)~Bin(n-x,b/1-a) where x,y,z have multinomial distribution with parameters a,b,c and n.
Determine the patient body temperature in fahrenheit : A robust first grader goes for swimming lessons three times a week, and he enjoys it thoroughly. During the first week of December, he develops an upper respiratory infection, starts coughing continuously, and has a high fever of 39°C.
Button to increase or decrease the number of the balls : Simulates a bouncing ball. Extend to allow mulitple balls. You can use the +I or -I button to increase or decrease the number of the balls and use teh Suspend and Resume buttoms to freeze the balls or resume bouncing. For each ball, assign a random c..
Hierarchy chart and design the logic : Draw the hierarchy chart and design the logic for a program that calculates the projected cost of an automobile trip. Assume that the user's car travels 20 miles per gallon of gas. Design a program that prompts the user for a number of miles drive..
What is the density of the oil : One cup is equivalent to 237. mL. If 1 cup of oil has a mass of 210. g, what is the density of the oil (in grams per cubic centimeter)?
User that will be asked to input the time : Write a code for the following C++ problem. We will have a user that will be asked to input the time of a train traveling in terms of minutes and this minutes is a non-negative integer.
Integer programming formulation for problem : The objective is to minimize the sum of the completion times of all the jobs. Provide an integer programming formulation for this problem.

Reviews

Write a Review

 

JAVA Programming Questions & Answers

  Method called printpowersof2 that accepts a maximum number

Write a method called printPowersOf2 that accepts a maximum number as an argument and prints each power of 2 from 20 (1) up to that maximum power, inclusive. For example, consider the following calls: printPowersOf2(3); printPowersOf2(10)

  Please write the code in java

Please write the code in java for  Recursion,  Sorting and Searching

  Method that accepts a string object

Word Counter Write a method that accepts a String object as an argument and returns the number of words it contains. For instance, if the argument is "Four score and seven years ago" the method should return the number

  Java application prompt user to put in integer from keyboard

Write a java application that performs the following task: prompt user to put in an integer from the keyboard, search for the user input from the array created in step 1.

  Implementation activities of software development

Analysis, design, and implementation activities of software development

  Add a button that will read the text fields

Create a GUI with two text fields for inputting the dimensions of a rectangle. Identify these two text fields as Length and Width with labels. Add a button that will read the text fields and cause the GUI to display the area and perimeter of the r..

  Question hierarchy of section

Add a class AnyCorrectChoiceQuestion to the question hierarchy of Section 9.1 that allows multiple correct choices. The respondent should provide any one of the cor- rect choices. The answer string should contain all of the correct choices, separa..

  Java program to compare two variables if they are equal

Write down program which will ask user to initialize two character arrays, program must compare two variables if they are equal.

  Modify the scholarship application

Modify the Scholarship application so that if a user enters a grade point average under 0 or over 4.0, or a negative value for either of the activities, an error message appears.

  Determine the visual resolution of resulting image

Drawing in 8.5 by 11 inch sheet is digitized by means of 300 dpi (dots per inch) scanner. Determine the visual resolution of resulting image (number of dots in each dimension)?

  Multiple choice java programming questions

Determine which of the following may be a violation of information hiding if inserted for the comment above?

  Write jvm program which accepts rpn expression

Write down the IJVM program which accepts RPN expression, with each operand and operator entered line by line. As each number (operand) is entered, push it on stack.

Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd