Não estou conseguindo fazer aparecer imagens num Panel

15 respostas
L

Olá pessoal. Estou fazendo um Menu inicial de jogo para o meu projeto de fim de semestre de fundamentos 1. O problema é que eu adiciono as imagens e elas não estão aparecendo. Poderiam tentar localizar onde está meu erro? O código está assim:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.*;
import javax.swing.*;
public class JogoMenu {

   
    public static void main(String[] args) {
    JFrame menu = new JFrame();
    menu.setSize(640,480);
    menu.setResizable(false);
    menu.setVisible(true);
    menu.setDefaultCloseOperation(menu.EXIT_ON_CLOSE);
    menu.setLayout(null);
    JLabel titulo = new JLabel("Space Fighters");
    titulo.setBounds(100, 50, 100, 100);
    JButton b1, b2, b3;
    b1 = new JButton("Novo Jogo");
    b2 = new JButton("High Scores");
    b3 = new JButton("Sair");
    b1.setBounds(410, 280, 150, 50);
    b2.setBounds(440, 340, 150, 50);
    b3.setBounds(470, 400, 150, 50);
    Listener newgame = new Listener();
    Listener2 highscores = new Listener2();
    Listener3 saida = new Listener3();
    b3.addActionListener(saida);
    menu.add(titulo);
    menu.add(b1);
    menu.add(b2);
    menu.add(b3);
    }

}

class Listener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        //chama o método de execução do jogo
    }        
}

class Listener2 implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        //Estatistica.openFile();
    }        
}

class Listener3 implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        System.exit(1);
    }        
}


class MyFrame extends JFrame
{
       public MyFrame()
       {
          MyPanel mp = new MyPanel();
          mp.setSize(640,480);
          mp.setBackground(new Color(0,0,0));
          getContentPane().add(mp);
       }
}

class MyPanel extends JPanel
{
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Image im = (new ImageIcon(getClass().getResource("C:/Users/Windows/Documents/NetBeansProjects/JogoMenu3/menu.jpg"))).getImage();
        g.drawImage(im, 100, 50, null);
        

    }        
}

15 Respostas

gabrielmassote

Tudo bem lpdon?

cara eu nao to vendo aonde voce esta chamando no seu main os metodo JFrame que voce cria la embaixo…
talvez tenha que usa-los…e instanciar objetos do painel para que a imagem seja exibida.

e outra coisa , voce cria uma imagem mas aplica ela aonde?

nao seria talvez mais facil voce criar um painel adicionar ele no frame e depois adicionar a imagem no panel…

nao entendi mto suas classes…mesmo sabendo que esta sobre escrevendo os metodos do frame e panel

L

Já dei uma arrumada aqui. Agora só cai num problema: chamar o método da MyPanel no main. Eu preciso de um Graphics dentro da construtora, mas eu não sei o que eu escrevo nela. Ex (main): mp.paintComponent(g); Que que eu coloco nesse g?

gabrielmassote

nao sei haha…

nao tenho mto as manha com essas coisas graficas ai nao…
mas nao seria o componente aonde voce vai colocar a figura?

L

Já dei um jeito. Agora surgiu um problema: eu tenho que passar o mouse por cima dos botões pra eles aparecerem :confused: Alguma ajuda?

gabrielmassote

setVisible(true) e setVisible(false) ajudam??

abraco

L

gabrielmassote:
setVisible(true) e setVisible(false) ajudam??

abraco

Ainda continua na mesmo :confused:

gabrielmassote

mas me explica o problema direito, que voce quer resolver…

L

Eu coloquei 3 botões. Mas o segundo e o terceiro só aparecem depois de eu passa o mouse por cima deles :confused:

gabrielmassote

creio que nao tem como…

pq para pegar uma acao no botao ele tem que estar ativado…
uma solucao seria mapear o local aonde que voce quer q apareca o botao, ai quando passar o mouse em cima desses lugares aparece o botao 2 ou 3.
uma forma seria pegar getX e getY de acao do mouse.

L

Mas eu queria que aparecesse tudo quando eu executasse o arquivo. O problema é esse: o segundo e o terceiro só tão aparecendo depois que eu passo o mouse por cima deles, mas eu queria que aparecessem normal, de primeira, exatamente como o primeiro.

gabrielmassote

ahhh ta haha…

eu achei que era para aparecer depois…
manda o codigo ai…pra da uma olhada…

L

O atual tá assim:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.*;
import javax.swing.*;

public class JogoMenu {

   
    public static void main(String[] args) {
    MyFrame menu = new MyFrame();
    menu.setSize(640,480);
    //menu.setResizable(false);
    menu.setDefaultCloseOperation(menu.EXIT_ON_CLOSE);
    menu.setLayout(null);
    JLabel titulo = new JLabel("Space Fighters");
    titulo.setBounds(100, 50, 100, 100);
    JButton b1, b2, b3;
    b1 = new JButton("Novo Jogo");
    b2 = new JButton("High Scores");
    b3 = new JButton("Sair");
    b1.setBounds(410, 280, 150, 50);
    b2.setBounds(440, 340, 150, 50);
    b3.setBounds(470, 400, 150, 50);
    Listener newgame = new Listener();
    Listener2 highscores = new Listener2();
    Listener3 saida = new Listener3();
    b3.addActionListener(saida);
    menu.add(titulo);
    menu.add(b1);
    menu.add(b2);
    menu.add(b3);
    menu.setVisible(true);
    }

}

class Listener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        //chama o método de execução do jogo
    }        
}

class Listener2 implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        //Estatistica.openFile();
    }        
}

class Listener3 implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        System.exit(1);
    }        
}

class MyFrame extends JFrame
{
    public MyFrame()
    {
        MyPanel mp = new MyPanel();
        mp.setSize(640, 480);
        getContentPane().add(mp);
    }        
}        

class MyPanel extends JPanel
{
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Image fundo = (new ImageIcon(getClass().getResource("fundo.jpg"))).getImage();
        Image menu2 = (new ImageIcon(getClass().getResource("menu2.png"))).getImage();
        g.drawImage(fundo, 0, 0, 640, 480, null);
        g.drawImage(menu2, 60, 50, 400, 80, null);
    }        
}
gabrielmassote

cara eu fiz sua classe de novo, utilizando construtores e tals…ai deu o mesmo pau, ai extendi a classe jogo para os seus Frames, tambem deu pau…ai resolvi extender a JFrame…ai deu certo…

entao o problema esta nas duas classes suas que criam o painel e o frame…

eu sugiro voce a colocar um painel no JFrame…e nesse painel adicionar as imagens…

o código que fiz e q ta aparecendo os botoes é esse…so que sem as imagens…

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.*;
import javax.swing.*;

public class JogoMenu extends JFrame{
	private JButton b1, b2, b3;
	private JLabel titulo;
   	private Listener newgame;
    private Listener2 highscores;
    private Listener3 saida;
   
   public JogoMenu(){
   	
   	this.setSize(640,480);
    //menu.setResizable(false);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setLayout(null);
   	
    newgame = new Listener();
    highscores = new Listener2();
    saida = new Listener3();
   		
   	titulo = new JLabel("Space Fighters");
    titulo.setBounds(100, 50, 100, 100);
    
    b1 = new JButton("Novo Jogo");
    b2 = new JButton("High Scores");
    b3 = new JButton("Sair");
    b1.setBounds(410, 280, 150, 50);
    b2.setBounds(440, 340, 150, 50);
    b3.setBounds(470, 400, 150, 50);
   	b3.addActionListener(saida);
   	
   	
   	this.add(titulo);
    this.add(b1);
    this.add(b2);
    this.add(b3);
   	
   }
    public static void main(String[] args) {
    
    	JogoMenu m = new JogoMenu();
    	m.setVisible(true);
    }

}

class Listener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        //chama o método de execução do jogo
    }        
}

class Listener2 implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        //Estatistica.openFile();
    }        
}

class Listener3 implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        System.exit(1);
    }        
}
L

Sem imagens tudo funciona numa boa. A partir do momento que coloco getContentPane().add(mp); os problemas começam :confused:

gabrielmassote

coloca a imagem direto no painel e o painel direto no frame…sem fazer essas coisas que voce esta fazendo de sobreescrever metodos ja feitos…que funciona perfeito…

ja fiz programas assim e funcionaram de boa…vai por mim

Criado 1 de junho de 2008
Ultima resposta 1 de jun. de 2008
Respostas 15
Participantes 2