Vários imagens em um Painel [Resolvido]

14 respostas
filiperangel

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!

14 Respostas

kaique

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.

ViniGodoy

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.

filiperangel

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!

kaique

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.

filiperangel

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!

filiperangel

UP!

filiperangel

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!

ViniGodoy

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();

filiperangel

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.

ViniGodoy

É 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

Marky.Vasconcelos

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.

filiperangel

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.

Marky.Vasconcelos

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

wchagas

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?

Criado 29 de março de 2008
Ultima resposta 17 de abr. de 2008
Respostas 14
Participantes 5