Imagem não aparece? o_o

4 respostas
G

Olhem meu script, e por favor se alguém souber, o que está errado? o_o

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

/*
 *  Cria a Janela e define suas preferências.
 */

public class Main extends JFrame {

    public Main() {
        setSize(400, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Fake the Sims ~");
        setLocationRelativeTo(null);
        
        Panel p = new Panel();
        add(p);
    }
    
    public static void main(String[] args) {
        Main m = new Main();
        m.setVisible(true);
    }

   /*
    *  Adiciona o painel com a imagem do ambiente.
    */
    
    class Panel extends JPanel {

        @Override
        public void paintComponent(Graphics g) {
            Image room = new ImageIcon("room.jpg").getImage();
            g.drawImage(room, 0, 0, this);
        }
    }
}

4 Respostas

N

To com problema na mesma coisa, soh q na hora de trokar imagem…

Eu acho q ai falta o .setVisible = true, ou o camminha que esta entre aspas q vc tem que colocar correto

M

Cada vez que o componente é redesenhado você carrega a mesma imagem. Seria muito mais interessante carregar uma vez só (no construtor, por exemplo). Teste essa classe:

import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 * Cria a Janela e define suas preferências.
 */
public class MainFrame extends JFrame {

	private static final long serialVersionUID = 1L;

	/**
	 * Cria uma janela que mostrará a imagem. Recebe como parâmetro o caminho da
	 * imagem a ser carregado (deve começar com '/'). Por exemplo, se o caminho
	 * da imagem é 'raíz do código fonte/imagens/img1.png' a String passada
	 * deverá ser "/imagens/img1.png".
	 * 
	 * @param imagePath
	 */
	public MainFrame(String imagePath) {
		setSize(400, 400);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		setTitle("Fake the Sims ~");
		setLocationRelativeTo(null);

		ImagePanel p;
		try {
			p = new ImagePanel(getClass().getResource(imagePath));
			add(p);
		} catch (IOException e) {
			JOptionPane.showMessageDialog(this, "Não foi possível"
					+ " carregar a imagem:\n" + e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}

	}

	/**
	 * Método main que cria e mostra uma instância da classe MainFrame.
	 * 
	 * @param args
	 *            parâmetros da linha de comando.
	 */
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {
				new MainFrame("/room.png").setVisible(true);
			}
		});
	}

	/**
	 * Classe usada para desenhar a imagem.
	 */
	private class ImagePanel extends JPanel {

		private static final long serialVersionUID = 1L;
		/**
		 * A imagem que será desenhada.
		 */
		private Image image;

		/**
		 * Construtor que carrega a imagem a ser desenhada.
		 * 
		 * @param url
		 *            a URL usada para carregar a imagem.
		 * @throws IOException
		 *             se a imagem não puder ser carregada.
		 */
		public ImagePanel(URL url) throws IOException {
			if (url == null) {
				throw new IOException("A imagem especificada não existe.");
			}
			image = ImageIO.read(url);
		}

		/**
		 * Repinta o componente, desenhando a imagem.
		 */
		@Override
		public void paintComponent(Graphics g) {
			g.drawImage(image, 0, 0, this);
		}

	}

}
UMC

A nivel de teste eu recomendaria colocar o caminho todo da imagem!! pra ve se e erro de imagem ou do caminho!!

vlw

B

Tente usar um objeto da classe Graphics2D. Dê um cast no objeto da classe Graphics para obter um da Graphics2D, e utilize-o para desenhar a imagem:

public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.drawImage(image, 0, 0, this); }

Criado 27 de dezembro de 2009
Ultima resposta 28 de dez. de 2009
Respostas 4
Participantes 5