imagem dentro de um Jpanel

Java

09/04/2009

Como faco pro JPanel carregar uma imagem? Posso colocar um JPanel sobre o outro, para sobrepor imagens? Consegui coloar uma imagem no JDesktopPane, mas naum consigo sobrepor labels nem textfield. O q eu quero eh: carregar varias imagens, sobrepor algumas sobre um fundo e entre elas inserir labels e textfields. Como se fosse uma pagina como a do Javafree, com fundo e area para inserir informacoes. Ateh
Karen-tiemi

Karen-tiemi

Curtidas 0

Respostas

Perenha

Perenha

09/04/2009

Olá, Bom, vou te mandar um exemplo simples para carregar um imagem e labels...

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

public class Teste {

	public static void main(String args[]) {

		//janela do programa	
		JFrame frame = new JFrame("Carregar Imagem");
		//container onde serão adicionados todos componentes
		Container container = frame.getContentPane();

		//carrega a imagem passando o nome da mesma
		ImageIcon img = new ImageIcon("lena.jpg");
		
		//pega a altura e largura
		int altura = img.getIconHeight();
		int largura = img.getIconWidth();
		
		//adiciona a imagem em um label
		JLabel label = new JLabel(img);
		//adiciona a altura e largura em outro label
		JLabel label2 = new JLabel("Altura: "+altura+"      Largura: "+largura);

		//cria o JPanel para adicionar os labels
		JPanel panel = new JPanel();
		panel.add(label, BorderLayout.NORTH);
		panel.add(label2, BorderLayout.SOUTH);

		//adiciona o panel no container
		container.add(panel, BorderLayout.CENTER);
		
		frame.pack();
		frame.setVisible(true);

		//pronto e simples

	}
}
Com isso vc pode criar quantos labels e imagens quiser e adicionando em outros JPanels ou no próprio container do JFrame. Ai é só brincar com o BorderLayout... Espero ter ajudado... Abraço. Rodrigo Perenha.
GOSTEI 0
Karen-tiemi

Karen-tiemi

09/04/2009

Muito obrigada, Rodrigo! Vou testar. :)
GOSTEI 0
Kolger

Kolger

09/04/2009

Aproveitando a dúvida alheia, testei o código, funcionou 100%, valeu :D Só um pequeno comentário aqui.. Não sei se fiz algo de errado, mas a imagem só apareceu realmente quando eu coloquei o caminho relativo dela na pasta do projeto.. Se eu simplesmente adicionasse a imagem ao projeto e botasse o nome em
//carrega a imagem passando o nome da mesma
      ImageIcon img = new ImageIcon("lena.jpg");
a imagem não aparecia.. Tive que botar assim:
//carrega a imagem passando o nome da mesma
      ImageIcon img = new ImageIcon("..\\nomeDoProjeto\\res\\nomeDaImg.jpg");
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

isso depende de como voce montou o projeto e como a IDE trabalha com imagens. Em sí não é um problema direto do Java, mas sim de como o seu programa está sendo gerado. O ImageIcon com um String contendo um caminho relativo (sem / no inicio) procura a partir do diretório atual, ou seja, aquele onde o programa está sendo executado (System.getProperty("user.dir")). No eclipse normalmente é o diretório do projeto. O último exemplo tambem deveria funcionar assim:
new ImageIcon("res/nomeDaImg.jpg");
[]]
GOSTEI 0
Sidplay

Sidplay

09/04/2009

Pessoal eu vou usar esse tópico pra tirar minha dúvida ok? Eu estou tentando adicionar uma imagem no panel mas não está dando certo. Eu coloquei esse código dentro do construtor do panel.
private JPanel getJPanelCentro() {
		if (jPanelCentro == null) {
			jPanelCentro = new JPanel();
			jPanelCentro.setLayout(null);
			ImageIcon img = new ImageIcon("../Imagem/logo.jpg");//adicionei essa linha
			JLabel labelImg = new JLabel(img);//adicionei essa linha
			jPanel.add(labelImg, BorderLayout.CENTER);  //adicionei essa linha
		}
		return jPanelCentro;
	}
E no construtor do ContentPane eu coloquei assim:
private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJPanel(), BorderLayout.CENTER);
			jContentPane.add(jPanelCentro, BorderLayout.CENTER);  //eu adicionei essa linha
		}
		return jContentPane;
	}
Mas aí sumiu o panel SUL que eu deixei com um nome que antes aparecia. E a imagem no panel CENTRO também não aparece. O que eu fiz de errado? A estrutura está assim: dentro de um panel tem dois panels: um norte e um no centro. No norte eu deixei um texto com o nome do sistema e no centro eu quero deixar a figura.
GOSTEI 0
Ricardo Staroski

Ricardo Staroski

09/04/2009

Creio que o correto seria assim:
private JPanel getJPanelCentro() {  
      if (jPanelCentro == null) {  
         jPanelCentro = new JPanel();  
         jPanelCentro.setLayout(new BorderLayout());  // Layout não deve ser null
         ImageIcon img = new ImageIcon("../Imagem/logo.jpg");  
         JLabel labelImg = new JLabel(img);  
         jPanelCentro.add(labelImg, BorderLayout.CENTER);    // adicionar imagem no CENTRO do JPANELCENTRO e não no jpanel...
      }  
      return jPanelCentro;  
   }
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

[quote="Sidplay"]Pessoal eu vou usar esse tópico pra tirar minha dúvida ok? Eu estou tentando adicionar uma imagem no panel mas não está dando certo. Eu coloquei esse código dentro do construtor do panel.
private JPanel getJPanelCentro() {
		if (jPanelCentro == null) {
			jPanelCentro = new JPanel();
			jPanelCentro.setLayout(null);
			ImageIcon img = new ImageIcon("../Imagem/logo.jpg");//adicionei essa linha
			JLabel labelImg = new JLabel(img);//adicionei essa linha
			jPanel.add(labelImg, BorderLayout.CENTER);  //adicionei essa linha
		}
		return jPanelCentro;
	}
E no construtor do ContentPane eu coloquei assim:
private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJPanel(), BorderLayout.CENTER);
			jContentPane.add(jPanelCentro, BorderLayout.CENTER);  //eu adicionei essa linha
		}
		return jContentPane;
	}
Mas aí sumiu o panel SUL que eu deixei com um nome que antes aparecia. E a imagem no panel CENTRO também não aparece. O que eu fiz de errado? A estrutura está assim: dentro de um panel tem dois panels: um norte e um no centro. No norte eu deixei um texto com o nome do sistema e no centro eu quero deixar a figura.
Antes de mais nada, esses métodos não são o que normalmente é chamado de Construtor. Construtor é o método que tem o mesmo nome que a classe e não tem retorno definido, usado pelo "new". Não encontrei onde tem o panel SUL que voce mencionou, mas acho que o erro é no método getJContentPane. Voce está adicionando dois componentes como CENTER, só vai ficar o último; e voce não está chamando o método getJPanelCentro() que é responsável em criar o componente.
private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJPanel(), BorderLayout.SUL);  // mudei essa linha, assumindo que é o SUL que mencionou
			jContentPane.add(getJPanelCentro(), BorderLayout.CENTER);  // mudei essa linha
		}
		return jContentPane;
	}
[]]
GOSTEI 0
Sidplay

Sidplay

09/04/2009

[quote="staroski"]Creio que o correto seria assim:
private JPanel getJPanelCentro() {  
      if (jPanelCentro == null) {  
         jPanelCentro = new JPanel();  
         jPanelCentro.setLayout(new BorderLayout());  // Layout não deve ser null
         ImageIcon img = new ImageIcon("../Imagem/logo.jpg");  
         JLabel labelImg = new JLabel(img);  
         jPanelCentro.add(labelImg, BorderLayout.CENTER);    // adicionar imagem no CENTRO do JPANELCENTRO e não no jpanel...
      }  
      return jPanelCentro;  
   }
Já corrigi esse erro do panel centro, foi falta de atenção mesmo hehehe. Valeu.
GOSTEI 0
Sidplay

Sidplay

09/04/2009

[quote="simu"] Não encontrei onde tem o panel SUL que voce mencionou, mas acho que o erro é no método getJContentPane. Voce está adicionando dois componentes como CENTER, só vai ficar o último; e voce não está chamando o método getJPanelCentro() que é responsável em criar o componente.
private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJPanel(), BorderLayout.SUL);  // mudei essa linha, assumindo que é o SUL que mencionou
			jContentPane.add(getJPanelCentro(), BorderLayout.CENTER);  // mudei essa linha
		}
		return jContentPane;
	}
[]]
Em me enganei, é um panel NORTE que eu coloquei um label com um texto e no CENTRO que eu quero colocar a imagem. Eu fiz o que o staroski falou pra corrigir e no bloco de código do contentPane eu coloquei do jeito que você falou mas ainda deu erro. Agora que eu estou entendendo melhor aqui, nessa linha:
jContentPane.add(getJPanel(), BorderLayout.CENTER);
É o panel principal que eu coloquei no centro. E nesse panel eu coloquei um no NORTE e outro no CENTRO. Esse aqui é o método do panel principal que está adicionado o norte e centro que estão declarados em outro lugar:
private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(new BorderLayout());
			jPanel.setBackground(Color.white);
			jPanel.add(getJPanelNorte(), BorderLayout.NORTH);
			jPanel.add(getJPanelCentro(), BorderLayout.CENTER);
		}
		return jPanel;
	}
Então naquela ContentPane acho que tem que colocar apenas este panel aqui não é? Lá eu não posso passar a linha do norte e centro pois essas eu acho que tem que passar é aqui nesse código do panel principal. Não sei se eu estou confundindo mas eu acho que é isso. Acho que o erro deve ser lá no método do panel CENTRO. O caminho da imagem eu coloquei certo e já passei a imagem como parâmetro do label. Não sei o que falta então.
GOSTEI 0
Sidplay

Sidplay

09/04/2009

E aí alguém pode me dar uma luz? A imagem não aparece mesmo no panel.
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

[quote="Sidplay"]E aí alguém pode me dar uma luz? A imagem não aparece mesmo no panel.
Tá muito confuso isso... não tem como simplificar um pouco... pelo menos só vendo uns métodos espalhados fica difícil analisar. Se estiver usando um Layout no getJPanelCentro(), como o [b]staroski[/b] sugeriu, então outro problema pode ser que a imagem não está sendo encontrada. []]
GOSTEI 0
Sidplay

Sidplay

09/04/2009

[quote="simu"][quote="Sidplay"]E aí alguém pode me dar uma luz? A imagem não aparece mesmo no panel.
Tá muito confuso isso... não tem como simplificar um pouco... pelo menos só vendo uns métodos espalhados fica difícil analisar. Se estiver usando um Layout no getJPanelCentro(), como o [b]staroski[/b] sugeriu, então outro problema pode ser que a imagem não está sendo encontrada. []]
simu, vou postar aqui o código da classe inteira pra você ver. A classe é pequena.
package principal;

import fornecedor.CadastroFornecedor;
import funcionario.CadastroFuncionario;
import historico.CadastroHistorico;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import java.awt.GridBagConstraints;
import java.awt.Rectangle;

import javax.swing.BorderFactory;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;

import cliente.CadastroCliente;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import lancamento.CadastroLancamento;
import javax.swing.ImageIcon;
import java.awt.Color;
import javax.swing.JLabel;
import java.awt.SystemColor;

public class Menu extends JFrame {

	private static final long serialVersionUID = 1L;

	private JPanel jContentPane = null;

	private JPanel jPanel = null;

	private JMenuBar jJMenuBar = null;

	private JMenu jMenuClientes = null;

	private JMenuItem jMenuItemCadastrarClientes = null;

	private JMenuItem jMenuItemHistorico = null;

	private JMenu jMenuFornecedores = null;

	private JMenuItem jMenuItemCadastroFornecedores = null;

	private JMenu jMenuFuncionarios = null;

	private JMenuItem jMenuItemCadastroFuncionarios = null;

	private JMenu jMenuLancamentos = null;

	private JMenuItem jMenuItemCadastroLancamentos = null;

	private JMenu jMenuSair = null;

	private JMenuItem jMenuItemSair = null;

	private JPanel jPanelNorte = null;

	private JPanel jPanelCentro = null;

	private JLabel jLabelCRC = null;

	/**
	 * This is the default constructor
	 */
	public Menu() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(636, 359);
		this.setJMenuBar(getJJMenuBar());
		this.setContentPane(getJContentPane());
		this.setTitle("Controle de Recebimento de Contas - Stelzer Consultoria");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJPanel(), BorderLayout.CENTER);

			       
			
		}
		return jContentPane;
	}

	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(new BorderLayout());
			jPanel.setBackground(Color.white);
			jPanel.add(getJPanelNorte(), BorderLayout.NORTH);
			jPanel.add(getJPanelCentro(), BorderLayout.CENTER);
		}
		return jPanel;
	}

	/**
	 * This method initializes jJMenuBar	
	 * 	
	 * @return javax.swing.JMenuBar	
	 */
	private JMenuBar getJJMenuBar() {
		if (jJMenuBar == null) {
			jJMenuBar = new JMenuBar();
			jJMenuBar.setPreferredSize(new Dimension(20, 20));
			jJMenuBar.add(getJMenuClientes());
			jJMenuBar.add(getJMenuFornecedores());
			jJMenuBar.add(getJMenuFuncionarios());
			jJMenuBar.add(getJMenuLancamentos());
			jJMenuBar.add(getJMenuSair());
		}
		return jJMenuBar;
	}

	/**
	 * This method initializes jMenuClientes	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenuClientes() {
		if (jMenuClientes == null) {
			jMenuClientes = new JMenu();
			jMenuClientes.setText("Clientes");
			jMenuClientes.setMnemonic(KeyEvent.VK_C);
			jMenuClientes.add(getJMenuItemCadastrarClientes());
			jMenuClientes.addSeparator();
			jMenuClientes.add(getJMenuItemHistorico());
		}
		return jMenuClientes;
	}

	/**
	 * This method initializes jMenuItemCadastrarClientes	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItemCadastrarClientes() {
		if (jMenuItemCadastrarClientes == null) {
			jMenuItemCadastrarClientes = new JMenuItem();
			jMenuItemCadastrarClientes.setText("Cadastrar Clientes");
			jMenuItemCadastrarClientes.addActionListener(new ActionListener() {  
				  
				        public void actionPerformed(ActionEvent e) {
				        	CadastroCliente cc = new CadastroCliente();
				        	cc.setVisible(true);  
				        }  
				   
				    });  
			
			
		}
		return jMenuItemCadastrarClientes;
	}

	/**
	 * This method initializes jMenuItemHistorico	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItemHistorico() {
		if (jMenuItemHistorico == null) {
			jMenuItemHistorico = new JMenuItem();
			jMenuItemHistorico.setText("Histórico de Clientes");
			jMenuItemHistorico.addActionListener(new ActionListener() {  
				  
		        public void actionPerformed(ActionEvent e) {
		        	CadastroHistorico ch = new CadastroHistorico();
					ch.setVisible(true);  
		        }  
		   
		    });  
		}
		return jMenuItemHistorico;
	}

	/**
	 * This method initializes jMenuFornecedores	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenuFornecedores() {
		if (jMenuFornecedores == null) {
			jMenuFornecedores = new JMenu();
			jMenuFornecedores.setText("Fornecedores");
			jMenuFornecedores.setMnemonic(KeyEvent.VK_F);
			jMenuFornecedores.add(getJMenuItemCadastroFornecedores());
			
		}
		return jMenuFornecedores;
	}

	/**
	 * This method initializes jMenuItemCadastroFornecedores	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItemCadastroFornecedores() {
		if (jMenuItemCadastroFornecedores == null) {
			jMenuItemCadastroFornecedores = new JMenuItem();
			jMenuItemCadastroFornecedores.setText("Cadastrar Fornecedores");
			jMenuItemCadastroFornecedores.addActionListener(new ActionListener() {  
				  
		        public void actionPerformed(ActionEvent e) {
		        	CadastroFornecedor cf = new CadastroFornecedor();
		        	cf.setVisible(true);  
		        }  
		   
		    });  
		}
		return jMenuItemCadastroFornecedores;
	}

	/**
	 * This method initializes jMenuFuncionarios	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenuFuncionarios() {
		if (jMenuFuncionarios == null) {
			jMenuFuncionarios = new JMenu();
			jMenuFuncionarios.setText("Funcionários");
			jMenuFuncionarios.setMnemonic(KeyEvent.VK_F);
			jMenuFuncionarios.add(getJMenuItemCadastroFuncionarios());
			  
		}
		return jMenuFuncionarios;
	}

	/**
	 * This method initializes jMenuItemCadastroFuncionarios	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItemCadastroFuncionarios() {
		if (jMenuItemCadastroFuncionarios == null) {
			jMenuItemCadastroFuncionarios = new JMenuItem();
			jMenuItemCadastroFuncionarios.setText("Cadastrar Funcionários");
			jMenuItemCadastroFuncionarios.addActionListener(new ActionListener() {  
				  
		        public void actionPerformed(ActionEvent e) {
		        	CadastroFuncionario cfu = new CadastroFuncionario();
		        	cfu.setVisible(true);  
		        }  
		   
		    });
		}
		return jMenuItemCadastroFuncionarios;
	}

	/**
	 * This method initializes jMenuLancamentos	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenuLancamentos() {
		if (jMenuLancamentos == null) {
			jMenuLancamentos = new JMenu();
			jMenuLancamentos.setText("Lançamentos");
			jMenuLancamentos.setMnemonic(KeyEvent.VK_L);
			jMenuLancamentos.add(getJMenuItemCadastroLancamentos());
			  
		}
		return jMenuLancamentos;
	}

	/**
	 * This method initializes jMenuItemCadastroLancamentos	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItemCadastroLancamentos() {
		if (jMenuItemCadastroLancamentos == null) {
			jMenuItemCadastroLancamentos = new JMenuItem();
			jMenuItemCadastroLancamentos.setText("Cadastrar Lançamentos");
			jMenuItemCadastroLancamentos.addActionListener(new ActionListener() {  
				  
		        public void actionPerformed(ActionEvent e) {
		        	CadastroLancamento cl = new CadastroLancamento();
		       cl.setVisible(true);  
		        }  
		   
		    });
		}
		return jMenuItemCadastroLancamentos;
	}

	/**
	 * This method initializes jMenuSair	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenuSair() {
		if (jMenuSair == null) {
			jMenuSair = new JMenu();
			jMenuSair.setText("Sair");
			jMenuSair.setMnemonic(KeyEvent.VK_S);
			jMenuSair.add(getJMenuItemSair());
		}
		return jMenuSair;
	}

	/**
	 * This method initializes jMenuItemSair	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItemSair() {
		if (jMenuItemSair == null) {
			jMenuItemSair = new JMenuItem();
			jMenuItemSair.setText("Sair do Sistema");
			jMenuItemSair.addActionListener(new ActionListener() {  
				  
		        public void actionPerformed(ActionEvent e) {
		        	System.exit(0);  
		        }  
		   
		    });
		}
		return jMenuItemSair;
	}

	/**
	 * This method initializes jPanelNorte	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanelNorte() {
		if (jPanelNorte == null) {
			jLabelCRC = new JLabel();
			jLabelCRC.setText("CONTROLE DE RECEBIMENTO DE CONTAS - CRC");
			jLabelCRC.setFont(new Font("Arial", Font.BOLD + Font.PLAIN, 20));
			jLabelCRC.setBounds(new Rectangle(62, 19, 488, 16));
			jPanelNorte = new JPanel();
			jPanelNorte.setLayout(null);
			jPanelNorte.setPreferredSize(new Dimension(50, 50));
			jPanelNorte.add(jLabelCRC, null);
			jPanelNorte.setBorder(BorderFactory.createLineBorder(SystemColor.controlDkShadow, 1));
		}
		return jPanelNorte;
	}

	/**
	 * This method initializes jPanelCentro	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanelCentro() {
		if (jPanelCentro == null) {
			jPanelCentro = new JPanel();
			jPanelCentro.setLayout(new BorderLayout());
			ImageIcon img = new ImageIcon("../Imagem/logo.jpg");
			JLabel labelImg = new JLabel(img);
			jPanelCentro.add(labelImg, BorderLayout.CENTER);  
		}
		return jPanelCentro;
	}

}  
Vou explicar certinho como funciona a classe. Eu criei um jPanel principal. E nesse panel eu coloquei mais dois panels, que um deles fica no norte com um titulo que eu coloquei e o outro eu coloquei no centro que é onde eu quero colocar a figura. A imagem eu coloquei numa pasta mas tem várias pastas até chegar nela. Mas com esse código simplifica o caminho não é? [b]"../Imagem/logo.jpg"[/b]
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

aqui funciona perfeitamente. Tem certeza que a imagem está nesse diretório? Um diretório "Imagem" PARALELO ao diretório da execução? o do projeto no Eclipse? Só para testar, inclui os println abaixo:
...
             ImageIcon img = new ImageIcon("./Imagem/logo.jpg");
             System.out.println(img.getIconWidth());
             try {
                System.out.println(new File("../Imagem/logo.jpg").getCanonicalPath());
            } catch (IOException ex) {
                ex.printStackTrace();
            }
             JLabel labelImg = new JLabel(img);
...
se o getIconWidth for -1 é sinal que a imagem não foi carregada. O 2° println deve mostrar qual o caminho completo da imagem. []]
GOSTEI 0
Sidplay

Sidplay

09/04/2009

[quote="simu"]aqui funciona perfeitamente. Tem certeza que a imagem está nesse diretório? Um diretório "Imagem" PARALELO ao diretório da execução? o do projeto no Eclipse? Só para testar, inclui os println abaixo:
...
             ImageIcon img = new ImageIcon("./Imagem/logo.jpg");
             System.out.println(img.getIconWidth());
             try {
                System.out.println(new File("../Imagem/logo.jpg").getCanonicalPath());
            } catch (IOException ex) {
                ex.printStackTrace();
            }
             JLabel labelImg = new JLabel(img);
...
se o getIconWidth for -1 é sinal que a imagem não foi carregada. O 2° println deve mostrar qual o caminho completo da imagem. []]
simu, imprimiu o -1 e no segundo print imprimiu o endereço correto da imagem. Ae eu coloquei esse endereço correto e ainda não mostra a imagem. O diretório Imagem não é paralelo ao diretório do projeto do Eclipse não. Fica numa pasta qualquer. O endereço mostrado eu coloquei assim, mas com barras duplas pois deixar com uma só dá erro. [b]D:\\Unifil\\4º ano\\TCC\\CRC\\Imagem\\logo.jpg[/b]
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

[quote="Sidplay"][quote="simu"]aqui funciona perfeitamente. Tem certeza que a imagem está nesse diretório? Um diretório "Imagem" PARALELO ao diretório da execução? o do projeto no Eclipse? Só para testar, inclui os println abaixo:
...
             ImageIcon img = new ImageIcon("./Imagem/logo.jpg");
             System.out.println(img.getIconWidth());
             try {
                System.out.println(new File("../Imagem/logo.jpg").getCanonicalPath());
            } catch (IOException ex) {
                ex.printStackTrace();
            }
             JLabel labelImg = new JLabel(img);
...
se o getIconWidth for -1 é sinal que a imagem não foi carregada. O 2° println deve mostrar qual o caminho completo da imagem. []]
simu, imprimiu o -1 e no segundo print imprimiu o endereço correto da imagem. Ae eu coloquei esse endereço correto e ainda não mostra a imagem. O diretório Imagem não é paralelo ao diretório do projeto do Eclipse não. Fica numa pasta qualquer. O endereço mostrado eu coloquei assim, mas com barras duplas pois deixar com uma só dá erro. [b]D:\\Unifil\\4º ano\\TCC\\CRC\\Imagem\\logo.jpg[/b]
ups, tem um erro meu nesse código, faltou o segundo ponto no ImageIcon (tive que tirar o ponto para acessar o diretório DENTRO do projeto):
...
ImageIcon img = new ImageIcon("../Imagem/logo.jpg");
...
mas provavelmente esse não é o problema. Tentei assim
...
             String dir = "D:\\develop\\ECLIPSE\\Forums\\Imagem\\logo.jpg";
             ImageIcon img = new ImageIcon(dir);
             System.out.println(img.getIconWidth());
             try {
                File file = new File(dir);
                System.out.println(file.getCanonicalPath());
                System.out.println("exists: " + file.exists());
                System.out.println("file: " + file.isFile());
                System.out.println("read: " + file.canRead());
            } catch (IOException ex) {
                ex.printStackTrace();
            }
...
e tambem funcionou perfeitamente. Não muda nada, mas [i]melhor [/i] é usar a '/' em vez da '\\' "D:/develop/ECLIPSE/Forums/Imagem/logo.jpg" Possíveis problemas: - o arquivo tem outro nome/diretório - o acesso não é permitido - erro na formatação da imagem no código acima adicionei mais algumas mensagens para testar. Outra ideia, pelo menos como teste, copie a Imagem para "D:\logo.jpg"; []]
GOSTEI 0
Sidplay

Sidplay

09/04/2009

simu, deu certo agora. Pelo jeito não estava encontrando a imagem pois agora eu coloquei no c:\ e encontrou de primeira. Com o seu novo código tinha imprimido tudo false aí eu resolvi colocar no c: e deu certo. Então com certeza não estava encontrando a imagem. Valeu mais uma vez pela ajuda.
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

[quote="Sidplay"]simu, deu certo agora. Pelo jeito não estava encontrando a imagem pois agora eu coloquei no c:\ e encontrou de primeira. Com o seu novo código tinha imprimido tudo false aí eu resolvi colocar no c: e deu certo. Então com certeza não estava encontrando a imagem. Valeu mais uma vez pela ajuda.
outra coisa que achei perigoso é o nome do diretório "4° ano"... não sei se o windows/Java não causa problemas com o '°' []]
GOSTEI 0
Sidplay

Sidplay

09/04/2009

[quote="simu"][quote="Sidplay"]simu, deu certo agora. Pelo jeito não estava encontrando a imagem pois agora eu coloquei no c:\ e encontrou de primeira. Com o seu novo código tinha imprimido tudo false aí eu resolvi colocar no c: e deu certo. Então com certeza não estava encontrando a imagem. Valeu mais uma vez pela ajuda.
outra coisa que achei perigoso é o nome do diretório "4° ano"... não sei se o windows/Java não causa problemas com o '°' []]
É mesmo hein. Pode ser que o bug de não encontrar a imagem possa ser por causa disso.
GOSTEI 0
Arthur Davi

Arthur Davi

09/04/2009

Galera eu gostaria de criar uma label que ficasse trocando de imagen nele mesmo( tipo slide) ja capturei com new ImageIcon mas
public foto3() {
        initComponents();




        //System.out.println();

        
             //carregaando vetor..forcei indice para fazer teste
             vetfotos[1] = new ImageIcon("C:\\Documents and Settings\\asouza\\Meus documentos\\Minhas imagens\\jpeg\\Picture1.png"); // aqui tem a tua imagem original
             vetfotos[2] = new ImageIcon("C:\\Documents and Settings\\asouza\\Meus documentos\\Minhas imagens\\jpeg\\Inverno.jpg"); // aqui tem a tua imagem original
             vetfotos[3] = new ImageIcon("C:\\Documents and Settings\\asouza\\Meus documentos\\Minhas imagens\\jpeg\\Picture3.png"); // aqui tem a tua imagem original
             int largura=1200;       //Largura da Imagem
             int altura=650;          //Altura da Imagem

                         //configurando tamanho imagens
               vetfotos[1].setImage( vetfotos[1].getImage().getScaledInstance(largura, altura, 100));
               vetfotos[2].setImage(vetfotos[2].getImage().getScaledInstance(largura, altura, 100));
               vetfotos[3].setImage(vetfotos[3].getImage().getScaledInstance(largura, altura, 100));
               
      


        //------------------- carregou as imagens-----------------

            //timer de imagen vai trocar a cada 2 segundos

            int numberOfMillisecondsInTheFuture = 2000; // 3 sec
            Date timeToRun = new Date(System.currentTimeMillis()+numberOfMillisecondsInTheFuture);
            Timer timer = new Timer();

                        timer.schedule(new TimerTask() {
                       public void run() {

                           jLabel1.setIcon(vetfotos[1]);//força a abri com uma imagen
                           
                                 if(vetfotos[1].equals(vetfotos[1]))
                                  {

                                      jLabel1.setIcon(vetfotos[2]);
                                        System.out.println("Entrou 1 if");
                                  }

                                  if(vetfotos[2].equals(vetfotos[2]))
                                  {
                                      
                                      jLabel1.setIcon(vetfotos[3]);
                                   System.out.println("Entrou 2 if");
                                    
                                  }

                                  if(vetfotos[3].equals(vetfotos[3]))
                                  {
                                      
                                    jLabel1.setIcon(vetfotos[1]);
                                    
                                     System.out.println("Entrou 3 if");
                                  }




            }
       }, timeToRun);

                   
   }//fecha o construtor
Só que ele entra dentro do if mas so executa o 1º porque? ai passa primeira imagen que eu forcei,entra segundo if e set imagem depois para.
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

[quote="Artdavi"]Galera eu gostaria de criar uma label que ficasse trocando de imagen nele mesmo( tipo slide) ja capturei com new ImageIcon mas
public foto3() {
        initComponents();




        //System.out.println();

        
             //carregaando vetor..forcei indice para fazer teste
             vetfotos[1] = new ImageIcon("C:\\Documents and Settings\\asouza\\Meus documentos\\Minhas imagens\\jpeg\\Picture1.png"); // aqui tem a tua imagem original
             vetfotos[2] = new ImageIcon("C:\\Documents and Settings\\asouza\\Meus documentos\\Minhas imagens\\jpeg\\Inverno.jpg"); // aqui tem a tua imagem original
             vetfotos[3] = new ImageIcon("C:\\Documents and Settings\\asouza\\Meus documentos\\Minhas imagens\\jpeg\\Picture3.png"); // aqui tem a tua imagem original
             int largura=1200;       //Largura da Imagem
             int altura=650;          //Altura da Imagem

                         //configurando tamanho imagens
               vetfotos[1].setImage( vetfotos[1].getImage().getScaledInstance(largura, altura, 100));
               vetfotos[2].setImage(vetfotos[2].getImage().getScaledInstance(largura, altura, 100));
               vetfotos[3].setImage(vetfotos[3].getImage().getScaledInstance(largura, altura, 100));
               
      


        //------------------- carregou as imagens-----------------

            //timer de imagen vai trocar a cada 2 segundos

            int numberOfMillisecondsInTheFuture = 2000; // 3 sec
            Date timeToRun = new Date(System.currentTimeMillis()+numberOfMillisecondsInTheFuture);
            Timer timer = new Timer();

                        timer.schedule(new TimerTask() {
                       public void run() {

                           jLabel1.setIcon(vetfotos[1]);//força a abri com uma imagen
                           
                                 if(vetfotos[1].equals(vetfotos[1]))
                                  {

                                      jLabel1.setIcon(vetfotos[2]);
                                        System.out.println("Entrou 1 if");
                                  }

                                  if(vetfotos[2].equals(vetfotos[2]))
                                  {
                                      
                                      jLabel1.setIcon(vetfotos[3]);
                                   System.out.println("Entrou 2 if");
                                    
                                  }

                                  if(vetfotos[3].equals(vetfotos[3]))
                                  {
                                      
                                    jLabel1.setIcon(vetfotos[1]);
                                    
                                     System.out.println("Entrou 3 if");
                                  }




            }
       }, timeToRun);

                   
   }//fecha o construtor
Só que ele entra dentro do if mas so executa o 1º porque? ai passa primeira imagen que eu forcei,entra segundo if e set imagem depois para.
Tá meio estranho tudo isso. Vários pontos: * em Java o primeiro indice é zero e não 1 * As condições do "if" não fazem muito sentido, sempre verdadeiras:
if(vetfotos[1].equals(vetfotos[1]))
o vetfotos[1] sempre vai ser igual ao próprio vetfotos[1] (mesmo vale para [2] e [3]). Melhor usar um contador para escolher a imagem. * o Timer.schedule está sendo chamado com um Date, por isso o run será executado apenas uma única vez. Se for para repetir tem que usar o schedule com 3 argumentos. Assumindo que as imagens estão em vetfotos[0], vetfotos[1] e vetfotos[2] e que vetfotos tem [i]apenas[/i] essas 3 posições.
...
        TimerTask task = new TimerTask() {
            private int imagem = 0;

            @Override
            public void run() {
                if (imagem >= vetfotos.length) {
                    imagem = 0;
                }
                jLabel1.setIcon(vetfotos[imagem]);
                imagem += 1;
            }
        };
        Timer timer = new Timer();
        timer.schedule(task, 0, numberOfMillisecondsInTheFuture);
...
[]]
GOSTEI 0
Arthur Davi

Arthur Davi

09/04/2009

Hoo valeu mesmo hem "vcs so bom" e que eu tinha forçado para a imagen ser igual para entrar dentro do if mesmo,arrumei aqui implementei,funfo certinho Abraços :razz:
GOSTEI 0
Tiago Trevizan

Tiago Trevizan

09/04/2009

Estou com um problema, espero que possam me ajudar !!! Estou fazendo um jogo de dados, e fiz um JPanel com 5 imagens de dados !!! Eu gostaria que quando sortea-se o dado aparecesse a imagem do dado sorteado !!! Estou fazendo da seguinte forma mas nao da certo ....
if (dado1==1) { imageLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("C:/Users/usuario/Desktop/Bozo2 - epn drive/src/bozo/imagem/d1.JPG"))); imageLabel1.setName("imageLabel1"); } if (dado1==2) { imageLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("C:/Users/usuario/Desktop/Bozo2 - epn drive/src/bozo/imagem/d2.JPG"))); imageLabel1.setName("imageLabel1"); }
Estou usando 5 imageLabel .... Se alguem pudesse me ajuda eu agradeceria !!!
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

Bom dia. Não é o mesmo problema sendo discutido aqui... se pelo menos estivesse carregando as imagens do mesmo jeito que foi discutido acima... O que exatamente significa "nao da certo"? O código deve estar lançando uma Exception - a mensagem dela deveria indicar qual o problema e onde está ocorrendo. Sem essas informações somente chutando: O getResource (obtido da classe) serve para carregar arquivos indicados pelo CLASSPATH. Tenta sem o getResource:
// não testado
imageLabel1.setIcon(new javax.swing.ImageIcon("C:/Users/usuario/Desktop/Bozo2 - epn drive/src/bozo/imagem/d1.JPG"));
[[]] [quote="tiagooot"]Estou com um problema, espero que possam me ajudar !!! Estou fazendo um jogo de dados, e fiz um JPanel com 5 imagens de dados !!! Eu gostaria que quando sortea-se o dado aparecesse a imagem do dado sorteado !!! Estou fazendo da seguinte forma mas nao da certo ....
if (dado1==1) { imageLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("C:/Users/usuario/Desktop/Bozo2 - epn drive/src/bozo/imagem/d1.JPG"))); imageLabel1.setName("imageLabel1"); } if (dado1==2) { imageLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("C:/Users/usuario/Desktop/Bozo2 - epn drive/src/bozo/imagem/d2.JPG"))); imageLabel1.setName("imageLabel1"); }
Estou usando 5 imageLabel .... Se alguem pudesse me ajuda eu agradeceria !!!
GOSTEI 0
Tiago Trevizan

Tiago Trevizan

09/04/2009

é o seguinte... estou carreganda as fotos tudo certinho...
 private void btnRodarDadosActionPerformed(java.awt.event.ActionEvent evt) {                                              

       
        
        Random valor = new Random();

       
        ImageIcon[] icones=null;
        icones = new ImageIcon[6];

        icones[0] = new ImageIcon("C:/Users/usuario/Desktop/Bozo/src/bozo/imagem/d1.JPG");
        icones[1] = new ImageIcon("C:/Users/usuario/Desktop/Bozo/src/bozo/imagem/d2.JPG");
        icones[2] = new ImageIcon("C:/Users/usuario/Desktop/Bozo/src/bozo/imagem/d3.JPG");
        icones[3] = new ImageIcon("C:/Users/usuario/Desktop/Bozo/src/bozo/imagem/d4.JPG");
        icones[4] = new ImageIcon("C:/Users/usuario/Desktop/Bozo/src/bozo/imagem/d5.JPG");
        icones[5] = new ImageIcon("C:/Users/usuario/Desktop/Bozo/src/bozo/imagem/d6.JPG");


        if (jogadas < 3) {
            cbD1.setEnabled(true);
            cbD2.setEnabled(true);
            cbD3.setEnabled(true);
            cbD4.setEnabled(true);
            cbD5.setEnabled(true);



            //btnRodarDados.setText("Rodar Dados");
            if (!cbD1.isSelected()) {
                dado1 = valor.nextInt(6) + 1;
                imageLabel1.setIcon(icones[dado1-1]);
                cbD1.setText(Integer.toString(dado1));
            }
            if (!cbD2.isSelected()) {
                dado2 = valor.nextInt(6) + 1;
                cbD2.setText(Integer.toString(dado2));
                imageLabel2.setIcon(icones[dado2-1]);
            }
            if (!cbD3.isSelected()) {
                dado3 = valor.nextInt(6) + 1;
                imageLabel3.setIcon(icones[dado3-1]);
                cbD3.setText(Integer.toString(dado3));
            }
            if (!cbD4.isSelected()) {
                dado4 = valor.nextInt(6) + 1;
                imageLabel4.setIcon(icones[dado4-1]);
                cbD4.setText(Integer.toString(dado4));
            }
            if (!cbD5.isSelected()) {
                dado5 = valor.nextInt(6) + 1;
                imageLabel5.setIcon(icones[dado5-1]);
                cbD5.setText(Integer.toString(dado5));
            }

            jogadas++;

            System.out.println("Jogadas: " + jogadas);
            txJogada.setText("Jogadas restantes: " + (3 - jogadas));

        }

        if (jogadas >= 3) {
            btnRodarDados.setText("Nova Rodada");
            cbD1.setSelected(true);
            cbD2.setSelected(true);
            cbD3.setSelected(true);
            cbD4.setSelected(true);
            cbD5.setSelected(true);

            LiberaCampo();
        }
    }                                             
essa é a funçao que gera os numero dos dados ao clicar no bota... Porem o imagemLabel1 , imagemLabel2 , imagemLabel3 , imagemLabel4 e imagemLabel5 estao em outra função que é a iniComponentes(); como faço pra reconhecer os imagensLabels e consequentemente trocar as imagens de acordo com o numero sorteado....
GOSTEI 0
Arthur Davi

Arthur Davi

09/04/2009

Amigo se eu entedi bem......vc esta com problema em reconhecer a imagem(label)? associar? eu usaria o metodo [b]Math.random[/b] ai vc colocaria os numeros de 0 5 das fotos e ele sortearia aleatoriamente o numeros. e vc associava ele a foto para mostrar se for isso posta ai que implemento a 'a luz' no seu codigo.
GOSTEI 0
Tiago Trevizan

Tiago Trevizan

09/04/2009

O problema nao é sorteador o numero nem associar o numero com a figura do dado !! O problema é com os imageLabel.setIcon que nao podem ser usados pois os imageLabels foram criados em outra funçao que é a public void initComponents(); Quando tento usar aparece "cannot find symbol" no netBeans !!!
GOSTEI 0
Arthur Davi

Arthur Davi

09/04/2009

[quote="tiagooot"]O problema nao é sorteador o numero nem associar o numero com a figura do dado !! O problema é com os imageLabel.setIcon que nao podem ser usados pois os imageLabels foram criados em outra funçao que é a public void initComponents(); Quando tento usar aparece "cannot find symbol" no netBeans !!!
Tiago posta o codigo da criação dos labels! mas eu crio os labens pela ide do netbens e não na raça! porque eu ja fiz trampo que chamava label dentro do botao e nao deu xabu!
private void lbltopoAncestorMoved(java.awt.event.HierarchyEvent evt) {                                      
     imagenstopo[0] = new ImageIcon("C:\\Players\\Picture1.png");
     imagenstopo[1] = new ImageIcon("C:\\Players\\Inverno.jpg");
     imagenstopo[2] = new ImageIcon("C:\\Players\\Picture3.png");



                 int largura=1254;       //Largura da Imagem
                 int altura=254;          //Altura da Imagem

                         //configurando tamanho imagens
             imagenstopo[0].setImage(imagenstopo[0].getImage().getScaledInstance(largura, altura, 100));
             imagenstopo[1].setImage(imagenstopo[1].getImage().getScaledInstance(largura, altura, 100));
             imagenstopo[2].setImage(imagenstopo[2].getImage().getScaledInstance(largura, altura, 100));


lbltopo.setIcon(imagenstopo[0]);
E funciono beleza,este em cima eu busco a imagens e defino o tamanho dela quase parecido,posta ai vamos tentar resolver.
GOSTEI 0
POSTAR