[RESOLVIDO]Colocar imagem plano de fundo de uma JFrame

16 respostas
Scobar20

Boa noite a todos do guj,

Estou tentando colocar uma imagem de fundo em um código JFrame, tentei vários meios já mas nenhum deu certo…

16 Respostas

F

Bom dia, u iniciante em java mas vou tentar te ajudar.

Ate o opnto que eu sei para colocr uma imagem em um jframe, tem que ser atraves de um jlabel e depois adicionar este jlabel ao jframe, vamos ao codigo.

criando a imagem:

Icon bug = new ImageIcon(getClass().getResource(“bug1.gif”));

criando o jlabel:

private JLabel jlabel3;

jlabel3 = new JLabel();

jlabel3.setIcon(bug); // aqui eu adiciono a imagem ao jlabel

adicionando o jlabel ao jframe:

add(jlabel3);

depois vc pode criar um metodo para capturar a dimensão da tela e redimencionar seu label com a iamgem como bem intender.

Espero ter ajudado, sou iniciante me java mas se não nos ajudarmos não evoluimos.

erico_kl

JLabel não serve para deixar uma imagem de background pois não temos como adicionar componentes nele…

uma ideia seria vc implementar o seu JPanel, sobrescrevendo o método paintComponents… aí vc consegue dar um drawImage passando a sua imagem por parâmetro

F

Opa, me desculpe se falei besteira eriko, rsrsrs

Scobar20

erico_kl:
JLabel não serve para deixar uma imagem de background pois não temos como adicionar componentes nele…

uma ideia seria vc implementar o seu JPanel, sobrescrevendo o método paintComponents… aí vc consegue dar um drawImage passando a sua imagem por parâmetro

É o JLabel eu sabia que não dava por causa disso ai mesmo que vc falou…
como ficaria o método paintComponents, pq acho que até com ele eu ja tentei fazer e acho que não consegui…XD

Se alguem mais puder me ajudar…

erico_kl
basicamente tu deve pegar o Graphics, criar uma cópia, e passar a imagem:
public class FundoBg extends JPanel {  
    private BufferedImage img = null;    
    private int x = 0;  
    private int y = 0;  
  
    public FundoBg(String urlImg) throws IOException    {  
        this.img =  ImageIO.read(new File(urlImg));  
    }  
  
    @Override  
    public void paintComponent(Graphics g) {  
        super.paintComponent(g);        
        Graphics gr = (Graphics2D)g.create();  
        gr.drawImage(img, x, y,this.getWidth(),this.getHeight(),this);  
        gr.dispose();     
    }  
}
by ViniGodoy..
Scobar20
erico_kl:
basicamente tu deve pegar o Graphics, criar uma cópia, e passar a imagem:
public class FundoBg extends JPanel {  
    private BufferedImage img = null;    
    private int x = 0;  
    private int y = 0;  
  
    public FundoBg(String urlImg) throws IOException    {  
        this.img =  ImageIO.read(new File(urlImg));  
    }  
  
    @Override  
    public void paintComponent(Graphics g) {  
        super.paintComponent(g);        
        Graphics gr = (Graphics2D)g.create();  
        gr.drawImage(img, x, y,this.getWidth(),this.getHeight(),this);  
        gr.dispose();     
    }  
}
by ViniGodoy..

So para esclarecer, isso dai é uma inner class? O que são aquelas variáveis? Aonde eu vou colocar o link da imagem?

Obrigado

erico_kl

vc se refere às variáveis x e y? São as coordenadas iniciais para a pintura da imagem, dê uma olhada na documentação do método drawImage
você pode deixá-la como InnerClass, mas sugiro criar uma classe separada, para vc poder utilizar em outros casos…

Scobar20

erico_kl:
vc se refere às variáveis x e y? São as coordenadas iniciais para a pintura da imagem, dê uma olhada na documentação do método drawImage
você pode deixá-la como InnerClass, mas sugiro criar uma classe separada, para vc poder utilizar em outros casos…

kkkkkk, to meio perdido aqui, como pode ver…XD

com essa classe eu devo instancia-la na classe que eu tinha, passar o link da imagem e blz. Mas aonde faço isso???
kkkkkkkk

erico_kl

Scobar20:
erico_kl:
vc se refere às variáveis x e y? São as coordenadas iniciais para a pintura da imagem, dê uma olhada na documentação do método drawImage
você pode deixá-la como InnerClass, mas sugiro criar uma classe separada, para vc poder utilizar em outros casos…

kkkkkk, to meio perdido aqui, como pode ver…XD

com essa classe eu devo instancia-la na classe que eu tinha, passar o link da imagem e blz. Mas aonde faço isso???
kkkkkkkk


você instancia como um JPanel (repare que essa classe nada mais é do que um painel com o método paintComponent sobrescrito) e aí vc usa onde quiser.
Você pode sobrescrever esse método direto no JFrame? Pode, mas com JPanel você terá mais mobilidade.

ou seja, sua LoginVIEW vai ter um painel dentro (podendo ser o próprio contentPane do JFrame) e este terá a imagem de fundo como background.

Scobar20

erico_kl:
Scobar20:
erico_kl:
vc se refere às variáveis x e y? São as coordenadas iniciais para a pintura da imagem, dê uma olhada na documentação do método drawImage
você pode deixá-la como InnerClass, mas sugiro criar uma classe separada, para vc poder utilizar em outros casos…

kkkkkk, to meio perdido aqui, como pode ver…XD

com essa classe eu devo instancia-la na classe que eu tinha, passar o link da imagem e blz. Mas aonde faço isso???
kkkkkkkk


você instancia como um JPanel (repare que essa classe nada mais é do que um painel com o método paintComponent sobrescrito) e aí vc usa onde quiser.
Você pode sobrescrever esse método direto no JFrame? Pode, mas com JPanel você terá mais mobilidade.

ou seja, sua LoginVIEW vai ter um painel dentro (podendo ser o próprio contentPane do JFrame) e este terá a imagem de fundo como background.

Cara funfou certinho, brigadao erico_kl
vou deixar essa classe salva certinha pra usa-la sempre que necessario…XD

C

Boa tarde pessoal.

Peço desculpas por estar postando em um tópico já antigo e resolvido, mas preciso de uma ajuda.

Sou novo na programação Java e estou com dúvida na hora de instanciar o jPanel com a classe descrita aqui.

Quando tento fazer: jPanel1 = new Paint(“nomeDoArquivo.jpg”);
Um erro é exibido, dizendo o seguinte: “Unreported exception IOException; must be caught or declared to be thrown”

Pelo o que eu entendi, ele está dizendo que a Exceção não está declarada.
Mas não é exatamente isso que fizemos no “public Paint(String urlImg) throws IOException”?

Aguardo resposta.

Marky.Vasconcelos

Falta o try/catch onde voce for utilizar.

C

Ok, funcionou perfeitamente. Obrigado.

pasp12

Sou novo aqui, e quando tento implementar o código acima aparece o seguinte

ago 29, 2015 9:10:17 AM br.com.pasp.arena.FundoBg 

GRAVE: null

javax.imageio.IIOException: Can’t read input file!

at javax.imageio.ImageIO.read(ImageIO.java:1301)

at br.com.pasp.arena.FundoBg.(FundoBg.java:22)

at br.com.pasp.pokemon.Principal.main(Principal.java:17)

Alguém poderia me ajudar
pasp12

Consegui resolver, eu queria pegar a imagem direto da minha pasta no java, mas não da
Alguém poderia me dizer se dar para usar uma imagem do mesmo pacote do projeto?

Felipe_Martins1

O meu ta dando erro no new paint oque eu faço qual e a importação algo do tipo ?

Criado 14 de agosto de 2012
Ultima resposta 22 de fev. de 2017
Respostas 16
Participantes 7