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);
}
}
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);
}
}
}