Adicionando JLabel(imagens) em qualquer lugar tela (código)

Por favor estou com a seguinte dúvida, construi o programa abaixo pra utilizar JLabel (imagens) pra colocar em qualquer lugar da tela, porem não estou dando conta, vcs podem perceber q jah uso tratando eventos do mouse, pego a posiçao do x e do y, e gostaria de poder adicionar várias imagens em qualquer lugar da tela, poderiam concertar o meu código se possiviel?
Jah quebrei muito a cabeça e isso eh o maximo q cheguei, preciso da ajuda de vcs, gujherois…

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;

public class Simulador extends JApplet 
{
 // executado somente quando for uma applet
 public void init()
 {
  PainelSimulador painel = new PainelSimulador();
  getContentPane().add(painel, BorderLayout.CENTER);
 }
    
 // executado somente quando for uma aplicação
 public static void main(String[] args)
 {
  JFrame janela = new JFrame("Programa");
  janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  PainelSimulador painel = new PainelSimulador();
  janela.getContentPane().add(painel, BorderLayout.CENTER);
  janela.setSize(new Dimension(600, 480));
  janela.setVisible(true); 
  
 }
 
}
import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.net.URL;

public class PainelSimulador extends JPanel implements ActionListener
{
 // definição de objetos	
 JButton b1,b2;
 Image computador1;
 String opcao="";
 int xMouse;
 int yMouse;
 JPopupMenu pop; 
 
 JMenuItem preferencias = new JMenuItem("Preferências da Interface"); 
 JMenuItem sair = new JMenuItem("Sair"); 
 
 
 public PainelSimulador()
 {
  
  Pegador peg = new Pegador(); 
  
  pop = new JPopupMenu(); 
  
  
  //adicionando os JMenuItem
  pop.add(preferencias); 
  pop.add(sair);
  
  preferencias.addActionListener(peg);
  sair.addActionListener(peg);
  
    
  //botão da imagem	
  b1= new JButton (new ImageIcon("imagem.gif"));
  b1.setToolTipText("Inserir");
  b1.addActionListener(this);
  b1.setActionCommand("imagem");
  
  //botão que servirá pra arrastar  
  b2= new JButton (new ImageIcon("cursorIcon.gif"));
  b2.setToolTipText("Cursor");
  b2.addActionListener(this);
  b2.setActionCommand("cursor");
  
  //setando o tamanho dos botões  
  b1.setMaximumSize(new java.awt.Dimension(50, 100));
  b2.setMaximumSize(new java.awt.Dimension(50, 100));
    
  // barra de ferramentas
  JToolBar barraFerramentas = new JToolBar();
  barraFerramentas.add(b1);
  barraFerramentas.add(b2);
  
  // definição do layout
  setLayout (new BorderLayout());
  
  
  // adiciona objetos
  add (barraFerramentas, BorderLayout.NORTH);
 
  //Pega a imagem 
  Toolkit kit = Toolkit.getDefaultToolkit();
  URL Computador1 = PainelSimulador.class.getResource("computador1.gif"); 
  computador1 = kit.getImage(Computador1);
  
  //imagem do tipo Icon pra inserir no JLabel
  Icon icon = new ImageIcon(computador1);

  //JLabel label = new JLabel("Text Label", icon, JLabel.CENTER);
  
  JLabel label = new JLabel(icon);

    
  // eventos do mouse
  addMouseListener(new MouseAdapter()
  {
   public void mousePressed(MouseEvent evento)
   {
   	if(evento.getButton() == evento.BUTTON1){ 
     //... executa algo com o botão esquerdo 
     
     //pega a posição do x e do y    
     xMouse = evento.getX();
     yMouse = evento.getY();
     
     if (opcao.equals("c"))
      add (label); 
     
     
    } 

   	if(evento.getButton() == evento.BUTTON3)
   	{ 
     //... executa algo com o botão direito 
     
     checkForTriggerEvent(evento);
     
     
      } // Fim do evento do botão direito
  	 	
   } // Fim do metodo mousePressed
   
   public void mouseReleased(MouseEvent evento) 
   { 
    checkForTriggerEvent(evento); 
    
   }//Fim de mouseReleased 
                         
   private void checkForTriggerEvent(MouseEvent evento) 
   { 
    if ( evento.isPopupTrigger() ) 
     pop.show( evento.getComponent(), evento.getX(), evento.getY() ); 
                
   }//Fim de checkForTriggerEvent 
   
  });
 
 
 
}
  
  
  
  //eventos do botão da barra de ferramentas
  public void actionPerformed(ActionEvent evento)
 {
  // botão Computador
  if (evento.getActionCommand().equals("computador")) 
  {
  	opcao = "c";
  	    
  }
  
  
  
  if (evento.getActionCommand().equals("cursor")) 
  {
   opcao = "#";
  }	
  
 }	// Fim do metodo
 
 //Metodo para o Jpopup Menu
 private class Pegador implements ActionListener 
 { 
  public void actionPerformed(ActionEvent evento) 
  { 
   if ( evento.getSource() ==  preferencias) 
   { 
    System.out.println("itemArquivo");
  
   } 
   
        
   if ( evento.getSource() ==  sair) 
   { 
    System.exit(0);
   }
  }//Fim de actionPerformed 
 }//Fim da classe Pegador           

}// FIM da classe Painel Simulador

se vc não está conseguindo ver a imagem acho q vc tem q colocar essa linha:
getClass().getResource(“computador.gif”);

em vez dessa:
PainelSimulador.class.getResource(“computador1.gif”);

obrigado amigo, mas infelismente não eh esse o problema, e mesmo se eu fizer a auteração q vc disse o programa não inicializa(naum sei pq)…
o problema está em eu clicar, e colocar a imagem em qualquer lugar da tela…, adicionar a imagem na minha tela atraves do Evento do Mouse…
q metodo eu devo adicionar, o q passar por parametro…

Dê uma olhada nesse código q acho q vai lhe ajudar.


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

public class Figura extends JFrame{
					
	private int x, y;
	Image img;
			
	public Figura(){
						
		img = Toolkit.getDefaultToolkit().getImage(getClass().getResource("saopaulo.jpg"));
				
		addMouseListener(new Handler());
		
		setSize(600, 600);
		show();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	  
	}
	
	public void paint(Graphics g){
		
		g.drawImage(img, x, y, null);						
	}
	
	private class Handler extends MouseAdapter{
		
		public void mouseClicked(MouseEvent me){
				
			x = me.getX();
			y = me.getY();
			repaint();			
		}		
	}
	
	public static void main(String args[]){
		
		new Figura();
	}
	
}	

obrigado novamente, esse do paint eh muito legal, eu uso ele sempre. só que eu dessa vez queria mudar um pouco o modo de programar e utilizar o JLabel ao invés de utilizar o metódo paint, para jogar uma imagem em qualquer lugar da tela, vc saberia como? tem jeito? se tem como que faz?

agradeço qualquer ajuda!

obrigado!

pq vc q mudar, p curiosidade ou vou ser n gosta de usar paint?

eu acho naum tenho certeza, com o paint vc tem q ficar redesenhando a tela toda hora e redesenhando todos os seus componentes (no caso a imagem de um carro por exemplo, novos na tela e os que já haviam antes) novamente (se vc for desenhando um por vez fica akela toda retorcida a medida q vc move a tela), e isso faz perder o aplicativo,etc em produtividade, ele fica mais lento e tal…
estou certo??? eh o q eu acho mas naum sei se estou certo…

aewwww irmão Heero, blz?
Vc ta certo o paint é atraso de projeto

O paint está depreciado?

blza irmão heero yui!!!
repondendo a do cu_ringa eu acho q tudo depende do projeto que vc tah fazendo, vc tem q ver o q adequa melhor ao seu trabalho no geral.

aproveitando e voltando ao assunto anterior…

utilizar o JLabel ao invés de utilizar o metódo paint, para jogar uma imagem em qualquer lugar da tela, vcs saberiam como? tem jeito? se tem como que faz?

levando em consideracao o codigo acima (minha primeira mensagem, o assunto inicial do tópico, o codigo).

Obrigado.

será q tem jeito de colocar um jlabel em qualquer lugar da tela com um evento do mouse(por exemplo aonde eu clicar aparece a imagem (Jlabel)?
se tem, como?

Vamos reviver esse topico aqui, pois estou com a mesma duvida que o Heero, estou precisando adicionar os JLabel em qualquer lugar de um Jpanel, ja adicionei uma escuta do tipo ActionListener em cada label e conseguir adicionar ao painel, mas não sei como adicionar em um determinado local do painel… se alguem poder ajudar ficarei grato…

Voce podia fazer com que seu JPanel desenha-se as imagens no Graphics no método paintComponent.
Voce pode desenhar em qualquer lugar passando como parametro o x e y do ponto inicial da imagem.

Mas o problema é que eu quero adicionar ao painel varios componentes com imagens pre-definidas por eu, e depois de adicionado ao painel tem q ter a possibilidade da pessoa modificar a possisão de cada imagens adicionadas, então pensei q teria uma forma mais adequada de adicionar JLabels do que redesenhado cada imagem e guardando a coordenada de cada imagem para a pessoa poder selecionar novamente a imagem ja adicionada ao painel. Pensei então adicionar uma escuta a cada JLabel, mas não tenho ideia de como adicionar em qualquer lugar do painel. Alguem pode me dar pelo menos uma ideia para eu tentar aqui e poder postar para futuras criticas??? valeu

Bem… o método setBounds modifica a posição do JLabel.
Um MouseListener resolve seu problema para saber quando ele clicou e para onde arrastou.

Mas voce vai precisar usar o Null-Layout e que sou fortemente contra.

Valeu Mark_Ameba, vou tentar imlementar esse codigo agora, mas para adiantar, qual o motivo de vc ser contra o Null-Layout? Porque na verdade é um JPainel pequeno de 100X100.

Nada garante ele ser visualizado corretamente em SOs diferentes nem mesmo em resoluções diferentes no mesmo SO.

Fora que fazer manutenção de sistemas assim é um saco.

temtei fazer assim, mas não tive resultado. Esta ai uma parte do codigo


    private void jLabel1MousePressed(java.awt.event.MouseEvent evt) {                                     
        plotarLabel(evt, "mao1.gif");      
        
    }                                       
       private void jLabel2MousePressed(java.awt.event.MouseEvent evt) {                                     
        plotarLabel(evt, "mao2.gif");        
        
    }                                    
       public void plotarLabel(MouseEvent evt, String nomeRef){
       
       Icon icone = new ImageIcon(nomeRef);
       JLabel jLabel = new JLabel();
       jLabel.setIcon(icone);
       jLabel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.WHITE)); 
       
       jPanel1.add(jLabel);
       
       //metodo apenas para retornar um label, feita so para testar
       jPanel1.getComponent(0).setBounds(0, 0, jPanel1.getComponent(0).getWidth(),
               jPanel1.getComponent(0).getHeight());
       jPanel1.revalidate();
       
   }      

esse codigo é apenas para testar uma forma de setar um label dentro do JPanel, mas não deu certo…

Obs: teste este codigo com os AbsoluteLayout, FlowLayout, GridLayout e NullLayout, sendo q no AbsoluteLayout e NullLayout ele nem adicionou o JLabel
alguma dica?