OneCompiler

JAVA 9

240

Write a Java program to create a thread for moving a ball inside a panel vertically. The
ball should be created when the user clicks on the start button (Use Swing).

package com.mycompany.practical_slip;

import java.awt.;
import java.awt.event.ActionEvent;
import java.util.logging.;
import javax.swing.*;

class BallPanel extends JPanel
{
private int yDelta = 0;

@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.red);
g.fillOval(175, yDelta, 50, 50);
repaint();
}

void setBallPos(int y) {
this.yDelta = y;
}
}

public class slip9_1
{
private Thread ballThread;
private BallPanel ballPanel;
private JFrame frame;
private JButton start;

slip9_1()
{
frame = new JFrame("Ball Movement App");
frame.setSize(400, 400);

ballPanel = new BallPanel();

start = new JButton("Start");
start.addActionListener((ActionEvent e) -> 
{
    startBallMovement();
});

frame.setLayout(new BorderLayout());
frame.add(ballPanel, BorderLayout.CENTER);
frame.add(start, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

}

private void startBallMovement()
{
if(ballThread == null || !ballThread.isAlive())
{
ballThread = new Thread(() -> {
moveBallVertically();
});
ballThread.start();
}
}

private void moveBallVertically()
{
int y = 0;
int dir = 1;
while(true)
{
try
{
Thread.sleep(15);
} catch (InterruptedException ex)
{
Logger.getLogger(slip9_1.class.getName()).log(Level.SEVERE, null, ex);
}

    y += 5 * dir;
    
    if(y > ballPanel.getHeight() - 50)
        dir = -1;
    
    if(y <= 0)
        dir = 1;
    
    ballPanel.setBallPos(y);
}

}

public static void main(String[] args)
{
new slip9_1();
}
}