[Resolvido] Carregando imagens

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);
   }
}

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

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

Eu adicinei mais uma parte no código para filtrar extensões, coloquei na linha 108

[code]
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)";
     
            
   
    }
    }); [/code]

Adicionei uma parte, na linha 106, para mudar o titulo da janela, q fica legalzinho ^^

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 ??

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

a resposta pra minha ultima pergunta:

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

Primeira parte finalizada! \o/