Imagem

como boto uma imagem na minha aplicaçao?
public class Principal {

public JFrame frame;
public float comp, alt, larg, result;
public JLabel text_comp, text_alt, text_larg;
public JLabel text_result= new JLabel();
public JTextField entrada_comp = new JTextField();
public JTextField entrada_alt = new JTextField();
public JTextField entrada_larg = new JTextField();;
public JButton BTN_calcular;
public float r;

ImageIcon caminhoImagem = new ImageIcon(getClass().getResource("/aquario.gif"));
Image imagem = caminhoImagem.getImage() ;


public Principal() {
	janela();
}

public void janela() {
	frame = new JFrame("Cal_L");
	componentes();
	frame.setSize(350,300);
	frame.setLocationRelativeTo(null);
	frame.setLayout(null);
	frame.setVisible(true);
	
}

public void componentes() {
	
	this.text_comp = new JLabel();
	this.text_comp.setBounds(14, 25, 120, 30);
	this.text_comp.setText("COMPRIMENTO");
	this.frame.add(text_comp);
	
	this.entrada_comp.setBounds(27, 50, 60, 30);
	this.frame.add(entrada_comp);
	//
	this.text_alt = new JLabel();
	this.text_alt.setBounds(150, 25, 120, 30);
	this.text_alt.setText("ALTURA");
	this.frame.add(text_alt);
	
	this.entrada_alt.setBounds(143, 50, 60, 30);
	this.frame.add(entrada_alt);
	//
	this.text_larg = new JLabel();
	this.text_larg.setBounds(255, 25, 120, 30);
	this.text_larg.setText("LARGURA");
	this.frame.add(text_larg);
	
	this.entrada_larg.setBounds(252, 50, 60, 30);
	this.frame.add(entrada_larg);
	//
	this.BTN_calcular = new JButton("Calcular");
	this.BTN_calcular.setBounds(120,120,100,50);
	
	BTN_calcular.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			
			calculos();
		}
	});
	
	this.frame.add(BTN_calcular);
	text_result.setBounds(150,180,100,50);
	frame.add(text_result);
	//
	 
;
	
	
}

public void calculos() {
	this.comp = Float.parseFloat(entrada_comp.getText());
	this.larg = Float.parseFloat(entrada_larg.getText());
	this.alt = Float.parseFloat(entrada_alt.getText());
	
	r = (comp*larg*alt)/1000;
	
	text_result.setText(""+r);
	
}

protected void paintComponent(Graphics g) {
   g.drawImage(imagem, 5, 200, 100, 100, null);
   
}

public static void main(String[] args) {
		
	Principal p = new Principal();
	
}

}

Se você só quer carregar e exibir a imagem, pode simplesmente carregar em um JLabel. Seria algo como:

import javax.swing.*;
import java.awt.*;
import java.io.*;
import javax.imageio.*;
import java.awt.BorderLayout;
import java.awt.image.BufferedImage;

public class LabelComImagem extends JFrame{

    private JLabel labelParaAImagem;

    public LabelComImagem(){
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setLayout(new BorderLayout());

        carregarImagemNoLabel();

        getContentPane().add(labelParaAImagem, BorderLayout.CENTER);
    }

    private void carregarImagemNoLabel(){
        try{
            BufferedImage bi = ImageIO.read(new File("pasta/imagem.png"));
            ImageIcon imagem = new ImageIcon(bi);
            labelParaAImagem = new JLabel(imagem);
        }catch(Exception e){
            labelParaAImagem = new JLabel("Não foi possivel carregar a imagem");
        }
    }

    public static void main(String[] args){
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new LabelComImagem().setVisible(true);
            }
        });
    }
}

Em muitos casos, o problema é o caminho da imagem, que precisa se absoluto ou relativo dependendo do caso. Usando ImageIO.read e o try catch, dá pra saber se a imagem carregou ou não. Também é importante usar a thread do Swing, para garantir que os componentes sejam processados corretamente (é o trecho EventQueue.invokeLater e public void run no main).

Se quer carregar e desenhar uma imagem (usando Graphics), eu prefiro criar um JPanel Custom em vez de fazer tudo no JFrame. Tem um exemplo nesse tópico: Imagem

Abraço.

me ajudo consegui mas queria entender masi e entender as outras formas de inseri imagem to a prendendo sozinho sem curso e essa questão de inserir imagem e pouco explicado nos vídeos

Antes de você apagar, dei uma olhada no código, que está quase correto. Faltou você chamar o método metodoImagem(), já que é nele que a imagem é carregada. E, se você vai posicionar os elementos no JFrame com BorderLayout, não pode usar setLayout(null). Precisa usar um ou outro.

Note que desenhar sobre o JPanel e usar o paintComponent foi uma sugestão, não é obrigatório, só é mais comum (e flexível). Mas você precisa adicionar os elementos (botões e campos de texto) no JPanel também, não no JFrame que contém o JPanel.

Fazendo diretamente no JFrame. Para usar o paint diretamente no JFrame,você precisa estende-lo. Ex:

import javax.swing.*;
import java.awt.*;
import java.io.*;
import javax.imageio.*;
import java.awt.BorderLayout;
import java.awt.image.BufferedImage;
import java.awt.event.*;
import java.awt.event.ActionListener;

public class Principal extends JFrame {

	public float comp, alt, larg, result;
	public JLabel text_comp, text_alt, text_larg;
	public JLabel text_result = new JLabel();
	public JTextField entrada_comp = new JTextField();
	public JTextField entrada_alt = new JTextField();
	public JTextField entrada_larg = new JTextField();;
	public JButton BTN_calcular;
	public float r;

    public BufferedImage imageL; 

	public Principal() {
        setTitle("Cal_L");
        setSize(350, 300);
		setLocationRelativeTo(null);
		setLayout(null);
		setVisible(true);
        carregarImagem();
		componentes();
	}

	public void componentes() {

		this.text_comp = new JLabel();
		this.text_comp.setBounds(14, 25, 120, 30);
		this.text_comp.setText("COMPRIMENTO");
		this.add(text_comp);

		this.entrada_comp.setBounds(27, 50, 60, 30);
		this.add(entrada_comp);
		//
		this.text_alt = new JLabel();
		this.text_alt.setBounds(150, 25, 120, 30);
		this.text_alt.setText("ALTURA");
		this.add(text_alt);

		this.entrada_alt.setBounds(143, 50, 60, 30);
		this.add(entrada_alt);
		//
		this.text_larg = new JLabel();
		this.text_larg.setBounds(255, 25, 120, 30);
		this.text_larg.setText("LARGURA");
		this.add(text_larg);

		this.entrada_larg.setBounds(252, 50, 60, 30);
		this.add(entrada_larg);
		//
		this.BTN_calcular = new JButton("Calcular");
		this.BTN_calcular.setBounds(120, 120, 100, 50);

		BTN_calcular.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				calculos();
			}
		});

		this.add(BTN_calcular);
		text_result.setBounds(150, 180, 100, 50);
		add(text_result);
	}

	public void calculos() {
		this.comp = Float.parseFloat(entrada_comp.getText());
		this.larg = Float.parseFloat(entrada_larg.getText());
		this.alt = Float.parseFloat(entrada_alt.getText());

		r = (comp * larg * alt) / 1000;

		text_result.setText("" + r);

	}

    public void carregarImagem(){
        try {
            imageL = ImageIO.read(getClass().getResource("aquario.gif"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        repaint();
    }

    public void paint(Graphics g) {
        super.paint(g);

        if (imageL != null){
            g.drawImage(imageL, 100, 100, null);
        }
    }

	public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
		        Principal p = new Principal();
            }
        });
	}
}

Se está aprendendo sozinho, recomendo repensar um pouco seu aprendizado. Você parece estar tentando as coisas aleatoriamente. Foque em entender o básico (como Layout Managers e a thread do Swing) antes de procurar outras coisas. Vídeos não focam muito nisso porque é algo bastante específico, e não importante para vídeos que focam em lógica, e tem vários exemplos na internet (aqui no GUJ, inclusive).

Abraço.

1 curtida

aaa batendo palmas agora para a essa explicação muito obrigado.