Como colococar um fundo em um JFrame?

Eu estava aki tentando colocar um fundo no meu jframe, ja procurei por diversas metodos na internet, mas é tudo muito confuso, não consigo entender muito bem os diversos tutoriais e as respostas em blogs.

Eu vou mostrar oque eu tentei aqui, se alguem puder me ajudar a consertar


Eu agredeceria muito se alguem pudesse me ajudar!

Exemplo simples de carregar imagem e desenhá-la sobre um JFrame:

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

public class UmFrameComImagem extends JFrame{

    BufferedImage fundo;

    public UmFrameComImagem(){
        setTitle("Frame com imagm");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);

        carregarFundo();
    }

    void carregarFundo(){
        try{ // o try é necessário para o caso de a carga falhar
            fundo = ImageIO.read(new File("fundo.png"));
        }catch( Exception e){}
    }

    @Override
    public void paint(Graphics g){
        super.paint(g);
         // desenha a imagem nas coordenadas 0, 0
        g.drawImage(fundo, 0, 0, null);
    }

    public static void main(String[] args){
       // para Swing,  use a thread abaixo, em vez de somente criar o frame e dar visible
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UmFrameComImagem().setVisible(true);
            }
        });
    }
}

Mas, no geral, é mais recomendado fazer essas coisas sobre um JPanel customizado e adicionar esse JPanel no JFrame. Este outro tópico tem um exemplo.

Abraço.

1 curtida

Há algum tempo postei este exemplo.

Mano, eu realmente aprecio você ter tirado do seu tempo para ajudar um iniciante como eu, só que eu realmente não consegui entender muito bem seu codigo, acho que preciso estudar mais conceitos técnicos para conseguir entender a parte final do seu codigo, mesmo assim muito obrigado!

Obrigado amigo, eu tentei ler este exemplo e descobri que realmente tem muita mais coisa que eu não entendo, acredito que devo estudar mais conceitos tecnicos, porém obrigado por ter tirado do seu tempo para me ajudar!

O que não entendeu?

bom, se realmente quer que eu faça a listinha
"private static final Component OBSERVER = new Component() {

        private static final long serialVersionUID = 1;
    };" 

isso é um atributo que recebe o valor de um metodo que foi feito ali mesmo?? não entendi como você fez isso, nunca fiz algo assim. Como eu mesmo tinha dito, são meus conhecimentos tecnicos, e tambem acho que tenho que estudar as blibliotecas que estão sendo ultilizadas
Porque, eu não entendi nada no do começo ao fim do ‘.‘Codigo hipotetico que não faz nada mas possui uma imagem de fundo’.’

       "InputStream arquivo = getClass().getResourceAsStream("/por-do-sol.jpg");
        BufferedImage imagem = ImageIO.read(arquivo);
        ImagePanel imagePanel = new ImagePanel(new GridBagLayout());
        imagePanel.setImage(imagem);

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL; 
        ...;"

Claro, entendi que algumas coisas como você colocando os objetos e passando coisas de parametros mas oque era? kkkkkk não conseguiria responder se me perguntassem sobre.
Se puder, poderia me dizer oque eu precisaria estudar para conseguir criar uma animação, ou algo interativo com o teclado, eu realmente não sei quais as blibliotecas ir atras, sou um completo iniciante, eu pensei bem antes de ir estudar todas as blibliotecas que você usou e não tenho certeza se deveria somente elas ou se deveria aprender conceitos de outras classes alem das que você usou. o conceito de estudar elas seria para aprender a criar interfaces graficas, animações, talvez rodar um video, algo assim!
Obrigado por ter me ajudado antes, valeu!

Isso é um atributo que está sendo inicializado instanciando uma classe anônima que estende Component.
Ela tem um atributo serialVersionUID apenas para não gerar warning.

Se você quer fazer um programa com interface gráfica de usuário, o mínimo que você precisa é conhecer algumas classes para criação de telas.

Falando sobre as blibliotecas, faz sentido eu estudar JFrame, JDialog, JInternalFrame e o Swing? ou eu deveria estudar isso tudo +o awt?

Começa por aqui:
https://docs.oracle.com/javase/tutorial/uiswing/components/index.html

Obrigado staroski, sinto que encontrei um mapa para saber oque vou estar aprendendo daqui para frente, estava meio estagnado esses dias por que não sabia muito bem oque fazer