Open In App

Moving Ball Using Thread in Java

Last Updated : 20 Dec, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Prerequisites:

This is a simple Java code including the concept of Thread and Java AWT to implement three balls moving in a particular path in an AWT frame. In this implementation, three balls are taken in an AWT frame and have specified their paths within the frame using some if conditions. For the movement of balls concept of Thread is used. Here a Thread is created in the constructor of the class and it will start when the mouse is clicked on the frame(Implemented using Mouse Listener). To make balls look like moving sleep method of thread is used. It will stop the balls moving for a few milliseconds and then start again so it will look like the balls are moving.

What we are going to build in this article? 

A sample video is given below to get an idea about what we are going to do in this article.

Implementation

Java




import java.awt.*;
import java.awt.event.*;
  
class Bouncing_Balls
    extends Frame implements MouseListener {
    // initializing co-ordinates
    int x = 40, y = 40, t1 = 1, t2 = 1;
    int x1 = 200, y1 = 40, t12 = 1, t22 = 1;
    int x2 = 100, y2 = 100, t13 = 1, t23 = 1;
    Thread th;
  
    // Making constructor
    Bouncing_Balls()
    {
        setSize(700, 800);
        setVisible(true);
  
        // Creating a new Thread
        th = new Thread(new Thread() {
            public void run()
            {
                while (true) {
                    x = x + t1;
                    y = y + t2;
                    x1 = x1 + t12;
                    y1 = y1 + t22;
                    x2 = x2 - t13;
                    y2 = y2 - t23;
  
                    // specifying some condition to make
                    // balls move in a particular path
                    if (x < 0 || x > 680)
                        t1 = t1 * (-1);
                    if (y < 20 || y > 780)
                        t2 = t2 * (-1);
                    if (x1 < 0 || x1 > 680)
                        t12 = t12 * (-1);
                    if (y1 < 20 || y1 > 780)
                        t22 = t22 * (-1);
                    if (x2 < 0 || x2 > 680)
                        t13 = t13 * (-1);
                    if (y2 < 20 || y2 > 780)
                        t23 = t23 * (-1);
  
                    try {
                        // Calling sleep method
                        this.sleep(5);
                    }
                    catch (Exception E) {
                    }
                    repaint();
                }
            }
        });
        addMouseListener(this);
    }
  
    public void mouseClicked(MouseEvent M)
    {
        // Thread will start when mouse is clicked
        th.start();
    }
    public void mousePressed(MouseEvent M) {}
    public void mouseReleased(MouseEvent M) {}
    public void mouseEntered(MouseEvent M) {}
    public void mouseExited(MouseEvent M) {}
  
    public void paint(Graphics g)
    {
        g.setColor(Color.pink);
        g.fillOval(x, y, 40, 40);
        g.setColor(Color.pink);
        g.fillOval(x1, y1, 40, 40);
        g.setColor(Color.pink);
        g.fillOval(x2, y2, 40, 40);
    }
    public static void main(String[] args)
    {
        Bouncing_Balls B = new Bouncing_Balls();
    }
}


Output



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads