I have just started learning java, and don't know much about GUI Components except for JFrame
and JLayout
.
How do I implement an object (ball) in a JFrame, and make it bounce of the walls infinite times?
I have just started learning java, and don't know much about GUI Components except for JFrame
and JLayout
.
How do I implement an object (ball) in a JFrame, and make it bounce of the walls infinite times?
You can create it via swing
with Thread
concept
You can create ball by swing drawImage in swing
concept
To do the moving and delaying concept you can use Thread
pakage
To do this and all see the reference Java complete edition 7
One approach is to add a subclass of JPanel with overridden paintComponent method to your JFrame. This class could have fields for the ball position and javax.swing.Timer for repainting the panel. It could be something like this (not tested):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class BouncingBall extends JPanel{
//Ball position
private int x = 0;
private int y = 0;
//Position change after every repaint
private int xIncrement = 5;
private int yIncrement = 5;
//Ball radius
private final int R = 10;
private Timer timer;
public BouncingBall(){
timer = new Timer(25, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
BouncingBall.this.repaint();
}
});
timer.start();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//If the ball hits one of the panel boundaries
//change to the opposite direction
if (x < 0 || x > getWidth()) {
xIncrement *= -1;
}
if (y < 0 || y > getHeight()) {
yIncrement *= -1;
}
//increment position
x += xIncrement;
y += yIncrement;
//draw the ball
g.fillOval(x - R, y - R, R * 2, R * 2);
}
}