Dúvida em colocar um JPanel num JFrame [RESOLVIDO]
14 respostas
pvrsouza
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.
packagesueca;importjava.awt.Graphics;importjava.awt.Image;importjavax.swing.ImageIcon;importjavax.swing.JPanel;publicclassMesaextendsJPanel{privateJogojogo;publicMesa(){this.jogo=newJogo();}@OverrideprotectedvoidpaintComponent(Graphicsg){super.paintComponent(g);Imageimg=(newImageIcon("/sueca/mesa_694X532_1.jpg").getImage());//o erro esta no caminho?g.drawImage(img,0,0,this);}}
packagesueca;importjava.awt.Graphics;importjava.awt.Image;importjavax.swing.ImageIcon;importjavax.swing.JPanel;publicclassInterfaceextendsjavax.swing.JFrame{Mesamesa;/** Creates new form Interface */publicInterface(){initComponents();this.mesa=newMesa();this.add(mesa);this.mesa.setVisible(true);}//continua...}
Por que voce nao carrega com ImageIO.load invés de new ImageIcon("").getImage() ?
E pode ser o caminho mesmo nesse caso.
pvrsouza
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
M
marcobiscaro2112
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.
pvrsouza
É. Consegui fazer não!
M
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
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.
pvrsouza
marcobiscaro2112:
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.
Assim??...
importjava.awt.Graphics;importjava.awt.Image;importjavax.swing.ImageIcon;importjavax.swing.JPanel;publicclassMesaextendsJPanel{privateImagebackground;publicMesa(){//this.jogo = new Jogo();this.background=newImageIcon("/mesa.jpg").getImage();}@OverrideprotectedvoidpaintComponent(Graphicsg){super.paintComponent(g);Imageimg=(newImageIcon(this.background).getImage());g.drawImage(img,0,0,this);}
pvrsouza
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
A imagem e classe estão no mesmo pacote.
pvrsouza
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.
É…vou dar uma passada lá mesmo Vini!
pvrsouza
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
ViniGodoy
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.
pvrsouza
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!
Brigadão Vini!
ViniGodoy
Ops, o que é quase impossível é descobrir o caminho onde a aplicação está instalada, não rodando. Rodando é fácil.
pvrsouza
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!!