GARANTIR DESCONTO

Fórum imagem dentro de um Jpanel #565092

09/04/2009

0

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

Responder

Posts

09/04/2009

Perenha

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.
Responder

Gostei + 0

09/04/2009

Karen-tiemi

Muito obrigada, Rodrigo! Vou testar. :)
Responder

Gostei + 0

16/04/2009

Kolger

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");
Responder

Gostei + 0

16/04/2009

Carlos Heuberger

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");
[]]
Responder

Gostei + 0

15/10/2009

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.
Responder

Gostei + 0

15/10/2009

Ricardo 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;  
   }
Responder

Gostei + 0

15/10/2009

Carlos Heuberger

[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;
	}
[]]
Responder

Gostei + 0

15/10/2009

Sidplay

[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.
Responder

Gostei + 0

15/10/2009

Sidplay

[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.
Responder

Gostei + 0

21/10/2009

Sidplay

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

Gostei + 0

21/10/2009

Carlos Heuberger

[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. []]
Responder

Gostei + 0

21/10/2009

Sidplay

[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]
Responder

Gostei + 0

21/10/2009

Carlos Heuberger

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. []]
Responder

Gostei + 0

21/10/2009

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]
Responder

Gostei + 0

21/10/2009

Carlos Heuberger

[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"; []]
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar