Problema ao carregar imagem em Jpanel[RESOLVIDO]

Boa noite pessoal, td certo ?
Seguinte estou com um problema no meu projeto, adicionei a ele o projeto towel pra usar o Jimagepanel, depois de apanhar um poquim do netbeans consegui ajusta minha tela com o jimagepanel, mas não estou conseguindo carregar a imagem:

private void initComponents() {

        try{
            /*
            javax.swing.JPanel pnlPrincipal =
            */
            pnlPrincipal = new com.towel.swing.img.JImagePanel(loadImage("/imagens/papelParede/principal.png"));
            btnSubTipo = new javax.swing.JButton();
            btnColecao = new javax.swing.JButton();
            btnTipo = new javax.swing.JButton();
            btnCarta = new javax.swing.JButton();
            btnRaridade = new javax.swing.JButton();
            btnCor = new javax.swing.JButton();
            btnMana = new javax.swing.JButton();
            btnFechar = new javax.swing.JButton();

            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setTitle("Controle de Cartas Magic");
            setMaximumSize(new java.awt.Dimension(505, 305));
            setMinimumSize(new java.awt.Dimension(505, 305));
            setResizable(false);
            getContentPane().setLayout(null);

        }catch(Exception ex){
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
        /*codigo continua*/

quando meu codigo chega nesse metodo o problema acontece


private BufferedImage loadImage(String file) throws IOException {
        return ImageIO.read(new File(file));
    }

fiz exatamente como falava no blog, adicionei a biblioteca do towel e ajustei meu jimagepanel, esta dando erro como se ele não estivesse achando a imegem no diretório q eu coloquei, ele da uma mensagem de “Can’t read input file”, minha estrutura de arquivos esta assim:

|-Classes
|-Enums
|-ModelosTabelas
|-Persistencia
|-TratadorComponentes
|-Views
|-imagens|–papelParede
| |
| |

Para carregar recursos que estão dentro do source do projeto use

getClassLoader().getResource("/images/imagem.png");

ok mas como eu tenho que modificar meu metodo para aceitar esse paremetro de url
pq eu tentei fazer assim :


URL url = getClassLoader().getResource("/images/imagem.png");

eu fiz o debbug no projeto e ele me flw q a variavel estava null

Pra facilitar, pega o valor diretamente como stream:

private BufferedImage loadImage(String file) throws IOException {  
        return ImageIO.read(getClassLoader().getResourceAsStream(file));  
    } 

Mas se a variavel ainda está null tem alguma coisa errada, não tenho certeza se o recurso tem que ficar dentro de src/ ou pode ser um diretorio antes.

E também se necessita a barra inicial do path.

Veja ClassLoader#getResourceAsStream

então cara o metodo exatamente como você postou não consigo colocar porque senão nem compila, tentei usar o que você passou com uma mistura de um trecho de codigo que tenho aqui:


private BufferedImage loadImage(String file) throws IOException {  
        return ImageIO.read(getClass().getResource(file)); 
    }

adaptei de um codigo que uso para passar icones para meus botões do sistema:


btnConfirma.setIcon(new ImageIcon(getClass().getResource("/imagens/Confirmar.png")));

se eu ponho assim :


private BufferedImage loadImage(String file) throws IOException {    
        return ImageIO.read(getClassLoader().getResourceAsStream(file));    
    }

ele parece que não acha o metodo getClassLoader() no form

acabei de achar meu problema, não era nem no meu jimagepanel, o problema era o seguinte eu estava mexendo na parte de codigos gerado pelo netbeans, eu comentei a estancia do meu panel como jpanel pra colocar uma estancia de jimagepanel, só que o netbeans jogou dentro do comentario a estancia de outros componentes da minha tela, preciso agr arrumar um jeito de comentar somente a estancia do meu jpanel, só que o netbeans ta jogando automatico tudo la dentro

cara consegui resolver meu problema, era o que eu estava falando mesmo, a parte que eu comentei pegou mais codigo do que devia, tive que copiar o código comentado e joga-lo em outro lugar, dei um jeitinho neh kkkkk, uma baita de uma gambiarra


private void initComponents() {

        /*
        javax.swing.JPanel pnlPrincipal = new javax.swing.JPanel();
        btnSubTipo = new javax.swing.JButton();
        btnColecao = new javax.swing.JButton();
        btnTipo = new javax.swing.JButton();
        btnCarta = new javax.swing.JButton();
        btnRaridade = new javax.swing.JButton();
        btnCor = new javax.swing.JButton();
        btnMana = new javax.swing.JButton();
        btnFechar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Controle de Cartas Magic");
        setMaximumSize(new java.awt.Dimension(505, 305));
        setMinimumSize(new java.awt.Dimension(505, 305));
        setResizable(false);
        getContentPane().setLayout(null);

        pnlPrincipal.setBackground(new java.awt.Color(154, 154, 154));
        */

        btnSubTipo = new javax.swing.JButton();
        btnColecao = new javax.swing.JButton();
        btnTipo = new javax.swing.JButton();
        btnCarta = new javax.swing.JButton();
        btnRaridade = new javax.swing.JButton();
        btnCor = new javax.swing.JButton();
        btnMana = new javax.swing.JButton();
        btnFechar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Controle de Cartas Magic");
        setMaximumSize(new java.awt.Dimension(505, 305));
        setMinimumSize(new java.awt.Dimension(505, 305));
        setResizable(false);
        getContentPane().setLayout(null);

        try{
            pnlPrincipal = new com.towel.swing.img.JImagePanel(loadImage("/imagens/principal.png"));
        }catch(Exception ex){

        }

        pnlPrincipal.setFillType(JImagePanel.FillType.RESIZE);
        pnlPrincipal.setPreferredSize(new java.awt.Dimension(505, 305));
        pnlPrincipal.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

você não saberia me dar uma solução melhor para comentar só o que preciso ?
senão ja marco o tópico como resolvido

flw

O JImagePanel tem um construtor padrão (sem argumentos) utilize-o para criar e adicionar na tela (acho que o netbeans suporta isso até pelo editor visual) e da um setImage no componente em algum metodo de init().

Mas você fez o correto mesmo assim.

blz vlw aew finalizado então