[Resolvido] Carregando imagens

4 respostas
P

O meu código esta funcionando, o único problema é que demora muito para carregar as imagens, usando um link de imagem da internet ou mesmo o JFileChooser.
Só aparece a imgem quando eu minimizo a tela e restauro ela novamente, ai a imagem aparece.
Outra coisa, dependendo da imagem, se for muito pequena, ela não fica centralizada na tela.
E quando abre o aplicativo, o mesmo vem minimizado.

o código:

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/*
 * @author Pixes
 */

class Janela extends Frame{
    
     Label      lb_Endereco;
     Label      lb_Arquivo;
     Label      lb_Mensagem;
     Label      lb_NomeArquivo; 
     Button     bt_Carregar; 
     Button     bt_ir;
    
    Panel pn_Imagem = new Panel();
    JTextField tf_URL;
    JFileChooser Ch_novo;
    JFileChooser chooser = new JFileChooser();  

 public Janela() throws IOException{
    
         {
            lb_Endereco = new Label("Insira a URL:");
            lb_Arquivo   = new Label("Arquivo interno:"); 
            lb_Mensagem  = new Label("Identificações ...");
            tf_URL = new JTextField(28);  
            lb_NomeArquivo = new Label("");
            bt_Carregar    = new Button("Arquivo");
            pn_Imagem      = new Panel ();
            bt_ir          = new Button("Ir");

             Panel painelNorte = new Panel();
             Panel Central = new Panel();
             painelNorte.setLayout(new GridLayout(2,3));
             painelNorte.setBackground(Color.white);
             Central.setBackground(Color.blue);
             painelNorte.add(lb_Endereco);
             painelNorte.add(tf_URL);
             painelNorte.add(bt_ir);
             painelNorte.add(new Panel());
             painelNorte.add(lb_Arquivo);
             painelNorte.add(lb_NomeArquivo);
             painelNorte.add(bt_Carregar);
             Central.add(pn_Imagem);

             lb_Mensagem.setBackground(Color.white);
             lb_Mensagem.setForeground(Color.red);

             this.setLayout(new BorderLayout());
             this.add("North", painelNorte);
             this.add("Center", Central);
             this.add("South", lb_Mensagem);
             
               bt_ir.addActionListener( new ActionListener() {  

                       @Override
                       public void actionPerformed(ActionEvent e) {
                           
                                  if(tf_URL.getText().trim().equals("")){
                       JOptionPane.showMessageDialog(null, "Escreva algo no endereço");
                                      
                                  }if(!tf_URL.getText().trim().equals("")){
                String valor = tf_URL.getText();       
                Image image = null;
                               {try {
                URL url = new URL(valor);
                image = ImageIO.read(url);
                       } catch (IOException ex) {                      
                    }
                 }

            JLabel label1 = new JLabel(new ImageIcon(image)); 
            pn_Imagem.add(label1, BorderLayout.CENTER);  
            pn_Imagem.setVisible(true);
            lb_Mensagem.setText(" Esa é uma nova informação "); 
                                   }            
                                }
                           });	 

            bt_Carregar.addActionListener( new ActionListener() {
                       @Override
                       public void actionPerformed(ActionEvent e){
                 
                Image image = null;
                JFileChooser arquivo = new JFileChooser();
                int res = arquivo.showOpenDialog(null);
                               
                            if(res == JFileChooser.APPROVE_OPTION){
                        
                            File arquivos = arquivo.getSelectedFile();  
                            {try {
                image = ImageIO.read(arquivos);
                } catch (IOException ex) {                      
             }
          }
            JLabel label1 = new JLabel(new ImageIcon(image));
            pn_Imagem.add(label1, BorderLayout.CENTER);
            pn_Imagem.setVisible(true);
            lb_Mensagem.setText(" Essa é uma nova informação ");
            }else
                JOptionPane.showMessageDialog(null, "Voce nao selecionou nenhum arquivo."); 
                 }
                });
            }
        }
    }
        
public class Olha{
   public static void main(String argumentos[]) throws IOException{
      Janela jan  = new Janela();
      TratEventosJan trat = new TratEventosJan();
      jan.addWindowListener(trat);
      jan.show();
   }
}

class TratEventosJan extends WindowAdapter{
    @Override
   public void windowClosing(WindowEvent evento){
      System.exit(0);
   }
}

4 Respostas

Dani_Gomes

Caro Pixes.
Para que sua aplicação fique com maior velocidade e atinja o que você quer, troque seus componentes, tipo: panel, button, label, frame, por: jpanel, jbutton, jlabel, jframe.
Não sei te explicar exatamente o por quê, mas basicamente é porque os componentes AWT(panel,button e assim por diante), foram os primeiros a serem desenvolvidos e não apresentaram uma boa permorfance, então foram desenvolvidos os componentes swing(jpanel, jbutton e assim por diante) que tem uma performance melhor e um tempo de resposta mais rápido.
Não sei se fui claro, mas se você trocar estes componentes, vai conseguir chegar onde você quer.

Abraços

P
Cara, muito obrigado pela ajuda =) Eu consigui também fazer ele abrir em um tamanho específico, só foi preciso eu adicionar um pequeno código na linha 153
jan.setSize(820, 650);
Eu adicinei mais uma parte no código para filtrar extensões, coloquei na linha 108
arquivo.setFileFilter(new javax.swing.filechooser.FileFilter(){
                        @Override
                public boolean accept(File f){
            return f.getName().toLowerCase().endsWith(".jpg") 
                     || f.isDirectory() 
                     ||  f.getName().toLowerCase().endsWith(".png")
                     ||  f.getName().toLowerCase().endsWith(".gif")
                     ||  f.getName().toLowerCase().endsWith(".jpeg");
            }
                    
                        @Override
            public String getDescription() {
        return "Arquivos de imagem (.jpg, .png, .gif, .JPEG)";
         
                
       
        }
        });
Adicionei uma parte, na linha 106, para mudar o titulo da janela, q fica legalzinho ^^
arquivo.setDialogTitle("Escolha uma imagem");
Foi o que mudei =D e ficou assim:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

/*
 * @author Pixes
 */

class Janela extends JFrame{
    
     JLabel      lb_Endereco;
     JLabel      lb_Arquivo;
     JLabel      lb_Mensagem;
     JLabel      lb_NomeArquivo; 
     JButton     bt_Carregar; 
     JButton     bt_ir;
    
    JPanel pn_Imagem = new JPanel();
    JTextField tf_URL;
    JFileChooser Ch_novo;
    JFileChooser chooser = new JFileChooser();  


 public Janela() throws IOException{
    
         {
            lb_Endereco = new JLabel("Insira a URL:");
            lb_Arquivo   = new JLabel("Arquivo interno:"); 
            lb_Mensagem  = new JLabel("Identificações ...");
            tf_URL = new JTextField(28);  
            lb_NomeArquivo = new JLabel("");
            bt_Carregar    = new JButton("Arquivo");
            pn_Imagem      = new JPanel ();
            bt_ir          = new JButton("Ir");

             JPanel painelNorte = new JPanel();
             JPanel Central = new JPanel();
             painelNorte.setLayout(new GridLayout(2,3));
             painelNorte.setBackground(Color.white);
             Central.setBackground(Color.blue);
             painelNorte.add(lb_Endereco);
             painelNorte.add(tf_URL);
             painelNorte.add(bt_ir);
             painelNorte.add(lb_Arquivo);
             painelNorte.add(lb_NomeArquivo);
             painelNorte.add(bt_Carregar);
             Central.add(pn_Imagem);

             lb_Mensagem.setBackground(Color.white);
             lb_Mensagem.setForeground(Color.red);

             this.setLayout(new BorderLayout());
             this.add("North", painelNorte);
             this.add("Center", Central);
             this.add("South", lb_Mensagem);
             
               bt_ir.addActionListener( new ActionListener() {  

                       @Override
                       public void actionPerformed(ActionEvent e) {
                           
                                  if(tf_URL.getText().trim().equals("")){
                       JOptionPane.showMessageDialog(null, "Escreva algo no endereço");
                                      
                                  }if(!tf_URL.getText().trim().equals("")){
                String valor = tf_URL.getText();       
                Image image = null;
                               {try {
                URL url = new URL(valor);
                image = ImageIO.read(url);
                       } catch (IOException ex) {                      
                    }
                 }

            JLabel label1 = new JLabel(new ImageIcon(image));   
            pn_Imagem.add(label1, BorderLayout.CENTER);  
            pn_Imagem.setVisible(true);
            lb_Mensagem.setText(" Esa é uma nova informação "); 
                                   }            
                                }
                           });	 

            bt_Carregar.addActionListener( new ActionListener() {
                       @Override
                       public void actionPerformed(ActionEvent e){
                
                Image image = null;
                JFileChooser arquivo = new JFileChooser();
                arquivo.setDialogTitle("Escolha uma imagem");
                
               arquivo.setFileFilter(new javax.swing.filechooser.FileFilter(){
                        @Override
                public boolean accept(File f){
            return f.getName().toLowerCase().endsWith(".jpg") 
                     || f.isDirectory() 
                     ||  f.getName().toLowerCase().endsWith(".png")
                     ||  f.getName().toLowerCase().endsWith(".gif")
                     ||  f.getName().toLowerCase().endsWith(".jpeg");
            }
                    
                        @Override
            public String getDescription() {
        return "Arquivos de imagem (.jpg, .png, .gif, .JPEG)";
         
                
       
        }
        });
          int res = arquivo.showOpenDialog(null);
        
                               
                            if(res == JFileChooser.APPROVE_OPTION){
                        
                            File arquivos = arquivo.getSelectedFile();  
                            {try {
                image = ImageIO.read(arquivos);
                } catch (IOException ex) {                      
             }
          }
          
            JLabel label1 = new JLabel(new ImageIcon(image));
            pn_Imagem.add(label1, BorderLayout.CENTER);
            pn_Imagem.setVisible(true);
            lb_Mensagem.setText(" Essa é uma nova informação ");
            }else
                JOptionPane.showMessageDialog(null, "Voce nao selecionou nenhum arquivo."); 
                 }
                });
            }
        }
    }
        
public class Olha{
   public static void main(String argumentos[]) throws IOException{
      Janela jan  = new Janela();
      jan.setSize(820,650);
      TratEventosJan trat = new TratEventosJan();
      jan.addWindowListener(trat);
      jan.show();
   }
}

class TratEventosJan extends WindowAdapter{
    @Override
   public void windowClosing(WindowEvent evento){
      System.exit(0);
   }
}
Eu tenho mais uma duvida Tem como ajustar a imagem para caber no JFrame ou Ajustar o JFrame pra caber a imagem ??
Dani_Gomes

Dá uma olhada neste link:
http://intelectolivre.blogspot.com/2008/07/exibindo-gravando-e-recuperando-imagens.html
Acredito que tenha alguma coisa que te sirva.

Abraços

P

a resposta pra minha ultima pergunta:

http://www.guj.com.br/java/259900-setsize-imagem#1355873

Primeira parte finalizada! \o/

Criado 29 de novembro de 2011
Ultima resposta 2 de dez. de 2011
Respostas 4
Participantes 2