É Possível Colocar uma imagem como Background?

Olá Comunidade !!

É o seguinte, estou tentando colocar uma imagem como background em um JPanel, isso é possível?

Eu pretendo colocar uma imagem de fundo, em um painel indicando a representação gráfica de um banco, (com os caixas, as filas…) , e depois eu pretendo colocar uns “bonequinhos” em cima desse painel.

Agradecendo desde já :wink:

Guilherme Zuffo

Escreva uma classe que estenda a JPanel e sobrescreva o método paintComponent(). Assim:

[code]public class PainelComBackground extends JPanel {

  private Image backgr;

  public PainelComBackground(Image img) {
        this.backgr = img;
  }

  protected void paintComponent(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        Dimension d = this.getPreferredSize();

        g2.setClip(0, 0, (int)d.getWidth(), (int)d.getHeight());
        g2.drawImage(this.backgr, null, null);
  }

}[/code]

Olá Dango!,

Eu não Consegui fazer funcionar… :frowning:

Eu fiz uma classe igual a que vc me passou:


/*
 * Created on 05/05/2003
 *
 */
package util;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;

import javax.swing.JPanel;

/**
 * @author Guilherme
 *
 */
public class PainelBackground extends JPanel {
              private Image backgr; 

	public PainelBackground(Image img) { 
		  this.backgr = img; 
	} 

	protected void paintComponent(Graphics g) { 

		  Graphics2D g2 = (Graphics2D)g; 

		  Dimension d = this.getPreferredSize(); 

		  g2.setClip(0, 0, (int)d.getWidth(), (int)d.getHeight()); 
		  g2.drawImage(this.backgr, null, null); 
	} 

}

E eu Chamo a Mesma assim,


	protected PainelBackground criaPainelCentral(){
		ImageIcon img = new ImageIcon("./imagens/fundo.png");
		
		PainelBackground painelCentral = new PainelBackground(img.getImage());  //
		
		return painelCentral;
	}
	

Fiz Algo de errado?

Guilherme Zuffo

oi, eu cometi alguns erros…; ao sobrescrever o método paintComponent() você deve, antes de mais nada, fazer uma chamada a super.paintComponent(g)…

Desculpe, eu estou meio enrolado agora e vou poder responder legal soh amanhã à tarde. Se você tiver uregncia consulte o artigo sobre splash-screen (aqui no guj)… dá na mesma…;

abraços…

E aí Dango !

  Eu dei uma olhada no Splash do GUJ que vc me falou, só que nele mostra o Splash com sendo aquela "Tela Inicial", achei o tutorial muito bom, e não conhecia o mesmo, 

Valeu pela dica! :wink:

  E A respeito do Painel com BackGround, eu não tenho tanta pressa assim.

Eu “meio que consegui” fazer ele funcionar, na verdade eu fiz uma gambiarra, tipo ele não estava mostrando pois com os métodos bd.getWidth() e (int)d.getHeight(), [/b]estavam retornando uma resolução muito pequena, uns 20 por 100 pixels, daí eu mudei para 500 x 500 no braço (sai dessa meu…) Bom ele mostrou a imagem, só que numa Gambirra só.

Vc poderia me mostrar o melhor modo para colocar uma imagem como Background? (sem querer ser chato sendo..  hehhe...)

Ó o cod que eu “mexi”

	protected void paintComponent(Graphics g) { 

		  Graphics2D g2 = (Graphics2D)g; 

		  Dimension d = this.getPreferredSize(); 
			
			//  AI AI AI Que Gambiarra!  foi mudado pois esta pegando uma área muito pequena  uns  20 por 100 pixels
		  g2.setClip(0, 0, /*(int)d.getWidth()*/500,500 /*(int)d.getHeight()*/); 
		  g2.drawImage(this.backgr, null, null); 
	} 

Muito Obrigado! :lol:

Guilherme Zuffo

Ai está… esse eu testei! :slight_smile:

[code]class PainelBackground extends JPanel {

private Image backgroundImage;

public PainelBackground(String imgPath) {

    backgroundImage = Toolkit.getDefaultToolkit().getImage(imgPath);
    System.out.println(backgroundImage);
    
    MediaTracker tracker = new MediaTracker(this);
    tracker.addImage(backgroundImage, 0);
    
    try {
          tracker.waitForID(0);
          System.out.println("waitForID() ... ok");
    }
    catch (InterruptedException e) {
          e.printStackTrace();
    }

}

protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(backgroundImage, 0, 0, this.getBackground(),this);
}
}[/code]

Os erros que eu tinha cometido no exemplo anterior foram 2: primeiro é necessário esperar que o recurso seja carregado com o MediaTracker… o segundo é que, quando você sobrescreve o método paintComponent() você deve dar uma chance do componente se desenhar antes de qualquer coisa (super.paintComponent())…; pelo menos é a recomendação da API.

Espero ter ajudado.

Dango muito Obrigado!!!

É isso mesmo!!! Mandou muito bem!!! Valeu mesmo cara!!!

Nos encontramos por aí!!! (Tomara que não seja para tirar mais dúvidas… hehehe…)

Grato! :smiley:

Guilherme Zuffo

cool! blz…!