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
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…
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?
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…
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).
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
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.
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?