Vários imagens em um Painel [Resolvido]

Galera, estou desenvolvendo uma aplicação para venda de passagens. Onde eu teria um painel com várias imagens simbolizando o ônibus e suas cadeiras(ocupadas ou não).
Gostaria de dicas dos senhores(as) para fazer isso. Tive a idéia de por um Painel com um Label, que seria a imagem do fundo do ônibus, e por cima do fundo eu adicionaria as imagens das cadeiras.
Utilizando o Netbeans eu não consigo por um label em cima do outro.

Aguardo ajuda!

Cara, tenta ver assim:
Cria uma janela e seta como layout o GridLayout. Aí você consegue adicionar vários labels nele, cada um ocupando um espaço da grid que o layout gera. Depois tenta ver se tem como setar o background daquele panel, aí você tenta jogar esse lance do ônibus. Deu pra entender??

[]'s.

Use uma imagem de fundo de background.

E posicione outras imagens sobre ela com Java2D:
http://java.sun.com/docs/books/tutorial/2d/TOC.html

Com java 2d, se você se sentir inspirado, pode até fazer os desenhos por código, no braço.

Kaique, obrigado pela ajuda. Mais acho que o 2d vai ser melhor pra mim.

ViniGodoy, você sabe se tem como eu colocar um evento nas imagens que representariam as cadeiras? um evento de MouseClick por exemplo!

tanks!

Se o evento que você chama de MouseCLick for quando você clicar no componente ou pressionar o botão do mouse e depois soltar, basta você implementar a classe MouseListener e adicioná-la como tratadora dos componentes que você deseja clicar…

[]'s.

Já começei a estudar o 2d, porém estou com dificuldades.
Fiz o teste utilizando um jFrame e adicionando a imagem nele, ficou legal.
Porém, tentei fazer desenhar dentro de um jPanel que se encontra dentro de um jInternalFrame e nada aconteceu!

Classe da imagem

public class LoadImage extends Component{
BufferedImage img;
    public LoadImage()
{
    try {
           img = ImageIO.read(new File("/br/com/TicketMaq/TicketMAQImage/vitor2.png"));
       } catch (IOException e) {
       }
}
}

Criando obj no jInternalframe e adicionando no jpanel

LoadImage ld = new LoadImage();
ld.setSize(30, 30);
jPainel3.add(ld);
ld.setVisible(true);

Se alguém tiver mais dicas…

Valeu pela força!

UP!

Meu povo, comecei a resolver meu problema.

Vamo lá:

criei minha classe para criar a imagem:

public class LoadImageApp extends Component {
          
    BufferedImage img;

    public void paint(Graphics g) {
        g.drawImage(img, 0, 0, this);
    }

    public LoadImageApp() {
       try 
       {
           img = ImageIO.read(new File("C:\\Documents and Settings\\xp\\Meus documentos\\db_add.png"));
       } 
       catch (IOException e) 
       {
       }

    }
}

Depois adicionei o JPanel no jInternalFrame e adiciono os objts LoadImageApp no jPanel.

jPanel1.add(new LoadImageApp());
jPanel1.repaint();

Poréns: só consigo adicionar imagem se o Layout do jPanel for GridLayout.

O que eu quero é adicionar as imagens em um lugar específico no jPanel, logo eu deixei o Layout free, só que as imagens não aparecem.

Ajuda plis!

Você deve sobrescrever o método paintComponent, não o método paint.

E você deve sempre fazer uma cópia do objeto Graphics:

Graphics2D g2d = (Graphics2D) g.create(); //Aqui vc põe a pintura das imagens g2d.dispose();

Não sei se eu entendi corretamente, fiz assim.

public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g.create();
           g2d.drawImage(img, 0, 0, this);
           g2d.dispose();
    }

Mais não funcionou nem com GridLayout. só o paint que exibe a imagem no GridLayout.

É isso mesmo.

Tenta fazer assim:

public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.drawImage(img, 0, 0, this); g2d.dispose(); }

Você pode ver um exemplo disso funcionando por aqui:
http://www.guj.com.br/posts/list/56248.java

Apesar de que parece que vc já andou visitando por lá. :-o

E para ver o evento, na sua classe se voce colocou 4 imagens uma do lado da outra com por exemplo 50 pixels cada imagem.
(sua Tela ficaria com 200 pixels)
Voce pode descobrir qual cadeira foi clidada dividindo o valor de x (mouseEvent.getX()) por 50, assim o resultado seria de 1 a 4 que é a posição das cadeiras no panel.

O mesmo para a altura.

Meu povo, muito obrigado pelas ajudas. Enfim consegui resolver o problema.

ViniGodoy

eu não consegui chamar o super.paintComponent(g); o único método que me aparecia era o Paint(g); porém não precisou disso.

Mark_Ameba

Eu coloquei um evento de click no Jpainel e pego o objto que está naquela posição dentro do Painel.

 private void jPanel1MouseClicked(java.awt.event.MouseEvent evt) {                                     
        Point pt = evt.getPoint();
        System.out.println(jPanel1.getComponentAt(pt).getName());
       
    }

Por fim eu consegui adicionar os componentes no nullLayout do Jpanel. o que faltava era dizer qual tamanho da imagem e em qual posição ela apareceria.

LoadImageApp ld2 = new LoadImageApp("C:\\Documents and Settings\\xp\\Meus documentos\\db_add.png");
              jPanel1.add(ld2);
              ld2.setSize(30,30);
              ld2.setLocation(0, 60);
              ld2.setName(Integer.toString(numImpar+9));

Minha classe LoadImageApp

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

public class LoadImageApp extends Component{
          
    BufferedImage img;

    public void paint(Graphics g) {
        g.drawImage(img, 0, 0, this);
    }
    
    public LoadImageApp(String caminhoimg) {
       try 
       {
            img = ImageIO.read(new File(caminhoimg));
       } 
       catch (IOException e) 
       {
       }
    }
}

Qualquer dúvida mais eu volto a perguntar galera. Muito obrigado pelas dicas e pela paciência.

Eu imaginei que voce iria usar um panel e desenhar uma mesma imagem em todas as posições que precisa de uma cadeira.

Pessoal, aproveitando o tópico, estou precisando colocar o logotipo da empresa na tela de login em uma aplicação J2EE que vai rodar num Smartphone. Como faço isto? Alguém pode me ajudar?