Boa Noite pessoal, sou novo por aqui e esta é a minha primeira pergunta, que já foi perguntada mas não conseguiu resolver minha dúvida:
Quero exibir uma imagem na tela com Jframe usando a biblioteca graphics2d, utilizei o código do link a seguir https://www.guj.com.br/t/graphics2d/48864/14 e adaptei para a minha situação. O código ficou assim:
private static final long serialVersionUID = 1L;
JFrame frame;
JPanel panel;
Desenhar() {
frame = new JFrame("Tela");
panel = new JPanel();
panel.setLayout(null);
frame.getContentPane().add(panel);
frame.setVisible(true);
frame.setSize(800, 600);
panel.add(this);
this.setBounds(50, 50, 100, 100);
}
public void paintComponent(Graphics g) {
try {
Graphics2D g2 = (Graphics2D) g;
InputStream imgStream = getClass().getResourceAsStream("imagens/img.png");
BufferedImage image = ImageIO.read(imgStream);
g2.drawImage(image, 100, 100, panel);
System.out.println("Imagem OK!");
} catch (Exception e) {
System.out.println("Imagem não localizada");
}
}
public static void main(String[] args) {
new Desenhar();
}
}
Acontece que a imagem não está sendo encontrada, criei uma pasta dentro do projeto com o nome de imagens e referenciei o caminho no código (“imagens/img.png”)
Outra coisa, sua imagem é sempre a mesma, então instancie uma única vez, fora do método paintComponent, pois a responsabilidade desse método é somente pintar os gráficos e não carregar imagens.
private static final long serialVersionUID = 1L;
JFrame frame;
JPanel panel;
//Instanciar a imagem fora do metodo
InputStream imgStream = getClass().getResourceAsStream("/imagens/img.png");
BufferedImage image = ImageIO.read(imgStream);
public void paintComponent(Graphics g) {
try {
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(image, 100, 100, panel);
System.out.println("Imagem OK!");
} catch (Exception e) {
System.out.println("Imagem não localizada");
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("Tela");
frame.setSize(800, 600);
Desenhar panel = new Desenhar();
frame.add(BorderLayout.CENTER, panel);
frame.setVisible(true);
}
}
Mas acusa erro de compilação na linha de BufferedImage image = ImageIO.read(imgStream);
Desculpe a minha ignorância, se eu tivesse um exemplo pronto que funcionasse eu conseguiria me virar aqui, mas não estou conseguindo entender o básico.
Agora sim! Rapaz muito obrigado. Acontece que o método não estava encontrando a imagem. Então eu criei um pacote dentro da pasta src com o nome imagem e coloquei a imagem lá dentro, ai funcionou corretamente. Valeu mesmo pela ajuda, o erro estava nos detalhes!