Olá, eu criei uma classe com o seguinte objetivo: fazer com que jlabels fossem criadas em uma quantidade aleatória (no máximo cinco) cada uma de uma lado aleatório da jframe, e na posição y aleatória de acordo com a altura da jframe, e então gostaria que elas fossem se movendo até o lado oposto, e cada vez que uma delas chegasse ao outro lado e não fosse mais vista pelo usuário a mesma fosse destruída, como eu sou um iniciante, eu gostaria que vocês aqui do fórum analisassem meu código, e me falassem erros que vocês viram nele, e se está tudo funcionando como devia, obs: Era para que cada pássaro tenha sua velocidade fixa, mais não está funcionando desse jeito, e alguns pássaros andam juntos como se fossem clones. Meu código é esse:
`
package Objects;
import java.awt.Component;
import java.awt.Image;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
public class Passaro extends JFrame{
Random rdm = new Random();
boolean bo;
int passquant;
public void remover(Component c){
this.remove(c);
}
Passaro(){
setTitle("Título");
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setLayout(null);
int width = this.getWidth();
passquant = rdm.nextInt(5);
while(true){
for(int i = 0; i<=passquant; ++i){
bo = rdm.nextBoolean();
if(bo==true){
ImageIcon img = new ImageIcon(getClass().getResource("/Assets/pássaro-i.gif"));
img.setImage(img.getImage().getScaledInstance(img.getIconWidth()-500,img.getIconHeight()-400, Image.SCALE_DEFAULT));
int largura = img.getIconWidth();
int altura = img.getIconHeight();
JLabel p = new JLabel(img);
p.setBounds(0,rdm.nextInt(this.getHeight()),largura,altura);
this.add(p);
this.repaint();
new Thread(new Runnable(){
public void run(){
int speed = rdm.nextInt(4)+2;
while(true){
if(p.getX()!=width){
p.setBounds(p.getX()+speed,p.getY(),largura,altura);
}else if(p.getX()==width){
remover(p);
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}else if(bo==false){
ImageIcon img = new ImageIcon(getClass().getResource("/Assets/pássaro.gif"));
img.setImage(img.getImage().getScaledInstance(img.getIconWidth()-500,img.getIconHeight()-400, Image.SCALE_DEFAULT));
int largura = img.getIconWidth();
int altura = img.getIconHeight();
JLabel p = new JLabel(img);
p.setBounds(this.getWidth()-100,rdm.nextInt(this.getHeight()),largura,altura);
this.add(p);
this.repaint();
new Thread(new Runnable(){
public void run(){
int speed = rdm.nextInt(4)+2;
while(true){
if(p.getX()!=width){
p.setBounds(p.getX()-speed,p.getY(),largura,altura);
}else if(p.getX()==width){
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
passquant = rdm.nextInt(5);
}
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[]args){
Passaro pass = new Passaro();
}
}
`
