[RESOLVIDO] Problema: Imagem renderizada em background do JPane sobrepõe demais elementos

Estou desenvolvendo um sistema de login/cadastro bem simples com Java. Estou utilizando o VsCode com a extensão de compilação.

Tenho uma classe Login que herda JFrame e possui os componentes, e uma PanelDegrade que eh a responsável por renderizar uma imagem de fundo atraves de drawImage(), a imagem eh renderizada perfeitamente.

O problema eh, com a imagem renderizada, a minha label fica sobreposta pela imagem, e eu perco o conteudo do JFrame, sendo tudo imagem

classe Login->

package IComponents.interfaces;

import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.HashMap;

import IComponents.components.*;
import IComponents.utils.*;

public class Login extends DefaultScreen {

  public Login(int width, int height) {
    super(width, height);

    setDefaultCloseOperation(EXIT_ON_CLOSE);

    setLayout(null);
    Container container = getContentPane();

    HashMap labelProps = new HashMap();
    labelProps.put("position", PropsFormatter.position(0, 0, 200, 100));
    labelProps.put("text", "Eu sou uma label");

    JLabel label = new DefaultLabel().addProps(labelProps);

    JPanel painel = new PanelDegrade();
    painel.setSize(600, 600);
    painel.setLayout(null);
    
    painel.setVisible(true);
    painel.add(label);
    setContentPane(painel);

    container.add(label);

    setVisible(true);
  }
}

classe PaneDegrade ->

package IComponents.components;

import javax.swing.*;

import java.awt.*;

import java.io.*;

import java.awt.Graphics;

import java.awt.image.*;

import javax.imageio.ImageIO;

public class PanelDegrade extends JPanel {

  private static final long serialVersionUID = 1L;

  BufferedImage imagem = null;

  @Override

  public void paintComponent(Graphics g) {

    Graphics2D g2 = (Graphics2D) g.create();

    try {

      this.imagem = ImageIO.read(new File("src/degrade.png"));

      g2.drawImage(imagem, 0, 0, 600, 600, this);

    } catch (Exception e) {

      e.printStackTrace();

    }

    this.paintComponents(g);

    g.dispose();

  }

}

a tela que me retorna ->

Se alguem puder me dar uma luz, eu agradeceria imensamente, estou iniciando em desenvolvimento grafico com java

Você está fazendo o seu paintComponent chamar o paintComponents, está errado.

Dá uma olhada neste post e usa um ImagePanel como contentPane do seu JFrame. :wink:

2 curtidas

Cara muitíssimo obrigado, era EXATAMENTE o que eu precisava, rodei a internet pra tentar descobrir e nada, muito obrigado!!!

:smile:

1 curtida