Dúvida em colocar um JPanel num JFrame [RESOLVIDO]

Galera,

Eu estou em dúvida sobre como colocar meu JPanel dentro do JFrame. Vejam se estou certo? Eu até tentei arrastar a classe Mesa para dentro do meu JFrame, ele vai, só que não aparece a imagem de fundo.

package sueca;

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

 
public class Mesa extends JPanel{
   
    private Jogo jogo;

    public Mesa(){
        this.jogo = new Jogo();
    }
 
    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        Image img = (new ImageIcon("/sueca/mesa_694X532_1.jpg").getImage()); //o erro esta no caminho?
        g.drawImage(img,0,0,this);
    }
}[/code]


[code]package sueca;

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

public class Interface extends javax.swing.JFrame {   
    Mesa mesa;
    /** Creates new form Interface */
    public Interface() {
        initComponents();
        this.mesa = new Mesa();
        this.add(mesa);
        this.mesa.setVisible(true);
    }
    //continua...
}

Fico grato pela atenção!

Por que voce nao carrega com ImageIO.load invés de new ImageIcon("").getImage() ?

E pode ser o caminho mesmo nesse caso.

Nem sabia que existia isso! Rsrsrsrsrsrs. Mas vou tentar.

Vou ver o caminho tb. Eu não vejo agora porque estou no PC do trabalho e não da parr ligar o note.

  • tarde eu aviso!

Abraços

Outra coisa importante: carregue a imagem apenas uma vez (faça isso no construtor) pois se você for carregar a imagem do arquivo a cada vez que o componente for redesenhado o desempenho será terrível.

É. Consegui fazer não!

:frowning:

Qual o caminho da sua imagem em relação a pasta de código fonte?

Por exemplo, é algo assim:

Pasta do projeto
|_ src
    |_sueca
        |_mesa_694X532_1.jpg

Se vai fazer um jogo, é bom seguir os tutoriais do meu site…

Aliás, o próximo que vai entrar lá é sobre entrada de dados via mouse e teclado.

Assim??..

[code]import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class Mesa extends JPanel{

private Image background;


public Mesa(){
    //this.jogo = new Jogo();
    this.background = new ImageIcon("/mesa.jpg").getImage();
}
    
@Override
protected void paintComponent(Graphics g){
    super.paintComponent(g);
    Image img = (new ImageIcon(this.background).getImage());
    g.drawImage(img,0,0,this);
}[/code]

[quote=marcobiscaro2112]Qual o caminho da sua imagem em relação a pasta de código fonte?

Por exemplo, é algo assim:

Pasta do projeto |_ src |_sueca |_mesa_694X532_1.jpg [/quote]

A imagem e classe estão no mesmo pacote.

[quote=ViniGodoy]Se vai fazer um jogo, é bom seguir os tutoriais do meu site…

Aliás, o próximo que vai entrar lá é sobre entrada de dados via mouse e teclado.[/quote]

É…vou dar uma passada lá mesmo Vini!

O problema tá no caminho da imagem mesmo. Qando eu coloco o caminho todo(C:/estudo/game/src/…) funciona.

Vou ter que fazer um ResourceBundle puxando de um arquivo de configurações (config.properties) com o caminho básico?

Eu fiz de uma forma que funcionou:

Isso é um POG?

Abraços

Se essa imagem não poderá ser alterada por seu usuário essa, na verdade, é a melhor forma de fazer. Isso permitirá que você carregue essa imagem de dentro de um .jar. Só cuidado que a sintaxe do getResource é case sensitive, mesmo que no Windows ele não seja, na hora de mandar a imagem para o .jar ele será.

No outro caso, você está usando o caminho relativo ao disco. Isso vai depender de que caminho sua aplicação está rodando, por isso, quando você usou o caminho completo, apareceu a imagem.

Uma alternativa para descobrir que caminho a aplicação está rodando é dar um print em new File(".").getCanonicalPath() e ver para que diretório ele aponta. Sua imagem estará sendo procurada a partir disso. Note que essa forma também é problemática porque o usuário pode definir um caminho diferente de execução no atalho da sua aplicação (o que as IDEs geralmente fazem). Descobrir qual caminho a aplicação está instalada é uma tarefa virtualmente impossível em java, portanto, usar caminhos do disco pode representar um problema sério.

To vendo que é mesmo! Affff…Para quem é novo na linguagem essas coisas parecem são uma pedra no caminho…mas sou insistente! Um dia eu aprendo! :smiley:

Brigadão Vini!

Ops, o que é quase impossível é descobrir o caminho onde a aplicação está instalada, não rodando. Rodando é fácil.

Para mim, neste momento, tanto rodando quanto na instalação são terriveis! Ainda estou encucado com este caso, porque eu fiz as coisas meio que sem enteder direito como funcionam, entende? Quando eu chegar em casa, eu vou ler a documentação e entender tudo que eu fiz. Acho que por isso que eu achei que era POG o que eu estava fazendo.

Esse negócio de Java vicia viu! Esse problemas me deixam aguniados. Não paro de pensar na solução!!

Abraços!