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