galera to com em exercício aqui de arrancar os cabelos das bolas, como passa painéis para o array e depois para o JLayeredPane ? to usando o netBeans então vou tentar nao passar o código todo. tenho uma classe principal uma q vai servir para adicionar os painéis com as labels cada painel, isso em um sistema de ranque.
public class Principal extends javax.swing.JFrame {
public Principal() {
initComponents();
camadaBK_Folha();
editBTN();
} private void btn_OpenTelaADDActionPerformed(java.awt.event.ActionEvent evt) {
RegistraKey addPaineis = new RegistraKey();
addPaineis.setVisible(true);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Principal().setVisible(true);
}
});
}
public ArrayList<PlanosDefundo> paineis = new ArrayList();
public PlanosDefundo painel_C1;
///////////
PlanosDefundo bkFolha = new PlanosDefundo("/res/24K.png", 0, 0, 1519, 1075);// Para 130 DPI, paisagem
public void camadaBK_Folha() {
jScrollPane1.setLayout(null);
camadas.setPreferredSize(new Dimension(1519, 1075)); // em x de .setBounds
camadas.revalidate(); // Atualiza layout do JScrollPane
//texte();
for (int i = 0; i < paineis.size(); i++) {
camadas.add(painel_C1.add(paineis.get(i)));
}
/////
bkFolha.setLayout(null);
bkFolha.setOpaque(true);
bkFolha.setBackground(Color.BLUE);
camadas.add(bkFolha);
bkFolha.repaint();
camadas.repaint();
}
public void editBTN() {
btn_OpenTelaADD.setText("<html><Add>Adicionar<br>Key</center></html>");
btn_OpenTelaADD.setMargin(new Insets(0, 0, 0, 0)); //umaforma de centralizar o texto
btn_OpenTelaADD.setOpaque(false);
btn_OpenTelaADD.setFocusPainted(false);
}
public JLayeredPane getCamadas() {
return camadas;
}
public void setCamadas(JLayeredPane camadas) {
this.camadas = camadas;
}
}
public class RegistraKey extends javax.swing.JFrame {
private Principal refPrincipal =new Principal(); // aqui vamos guardar a janela Main
public RegistraKey() {
initComponents();
}
private void btn_adicionarKeyActionPerformed(java.awt.event.ActionEvent evt) {
addPaineis();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new RegistraKey().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton btn_adicionarKey;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JLabel lbl_Info1;
private javax.swing.JTextField textFild_AtletaA;
private javax.swing.JTextField textFild_AtletaB;
private javax.swing.JTextField textFild_DadosA;
private javax.swing.JTextField textFild_DadosB;
// End of variables declaration
PlanosDefundo p;
public void addPaineis(){
refPrincipal.paineis.add( new PlanosDefundo("",50,50,200,150));
refPrincipal.bkFolha.repaint();
}
}
public class PlanosDefundo extends JPanel {
private BufferedImage imagem_BKs;
private String caminhoImagem = "";
public int largura;
public int altura;
public int posicaoX;
public int posicaoY;
public PlanosDefundo(String caminhoImagem, int posicaoX, int posicaoY, int largura, int altura) {
this.caminhoImagem = caminhoImagem;
this.largura = largura;
this.altura = altura;
this.posicaoX = posicaoX;
this.posicaoY = posicaoY;
this.setBackground(Color.BLUE);
montarImagem();
}
public void montarImagem() {
try {
InputStream is = getClass().getResourceAsStream(caminhoImagem);
if (is != null) {
BufferedImage original = ImageIO.read(is);
BufferedImage redimensionada = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_ARGB);
Graphics g = redimensionada.createGraphics();
g.drawImage(original, 0, 0, largura, altura, null);
g.dispose();
imagem_BKs = redimensionada;
// Também ajusta o tamanho do painel para o novo tamanho da imagem
this.setPreferredSize(new java.awt.Dimension(largura, altura));
this.setSize(largura, altura);
} else {
System.err.println("Imagem não encontrada");
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g) {
if (imagem_BKs != null) {
g.drawImage(imagem_BKs, 0, 0, getWidth(), getHeight(), this);
}
setOpaque(false); // ← Garante que o fundo não sobreponha os filhos
}
}