Imagens em um label

3 respostas
P

Estou fazendo um código para abrir imagens da internet por meio de URLs, eu consigo, porém não consigo fazer em uma label específico, só consigo fazer abrir a imagem criando uma nova janela. E eu queria saber se vocês me ajudariam com essa pequena duvida.

Queria que a imagem fosse carregada no fundo azul.

Desde já, agradeço

Segue 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.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/*
 * @author Pixes
 */

class Janela extends Frame
{
    public Label     lb_Endereco;
    public Label     lb_Arquivo;
    public Label     lb_Mensagem;
    public TextField tf_NomeArquivo; 
    public Button    bt_Carregar; 
    public Panel     pn_Imagem;
    public Button    bt_ir;
    JTextField tf_URL;

 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);  
 tf_NomeArquivo = new TextField("", 25);
 bt_Carregar    = new Button("Arquivo");
 pn_Imagem      = new Panel ();
 bt_ir          = new Button("Ir");

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

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

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

            @Override
            public void actionPerformed(ActionEvent e) {
        
               String valor = tf_URL.getText();       
                    Image image = null;
        {
        try {
            URL url = new URL(valor);
            image = ImageIO.read(url);
            } catch (IOException ex) {                      
         }
      }
    
   //Essa parte cria uma nova janela
    JFrame frame = new JFrame();
    JLabel label = new JLabel(new ImageIcon(image));  
    frame.getContentPane().add(label, BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
	//

            if(tf_URL.getText().trim().equals("")){
            JOptionPane.showMessageDialog(null, "Escreva o endereço ");
				}  
			}       
		});	 
     setBackground(Color.blue);
    }
}


public class Teste{
   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);
   }
}

3 Respostas

mauricioadl

pelo que entendi, vc quer q a imagem abra no pn_image certo?

se for adicione o JLabel dentro dele e adicione a imagem dentro do JLabel, dae vai dar certo.

[]´s

P

Valeu pela ajuda cara =) .

Olha como ficou 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.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

/*
 * @author Pixes
 */

class Janela extends Frame
{
    public Label lb_Endereco;
    public Label lb_Arquivo;
    public Label lb_Mensagem;
    public TextField tf_NomeArquivo; 
    public Button  bt_Carregar; 
    public Button    bt_ir;
    JTextField tf_URL;
	Panel pn_Imagem = new Panel();

 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);  
 tf_NomeArquivo = new TextField("", 25);
 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(tf_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) {
       
               String valor = tf_URL.getText();       
                    Image image = null;
        {
        try {
            URL url = new URL(valor);
            image = ImageIO.read(url);
            } catch (IOException ex) {                      
         }
      }
 
 //A Parte nova
        JLabel label1 = new JLabel(new ImageIcon(image)); 
              
        pn_Imagem.add(label1, BorderLayout.CENTER);  
        pn_Imagem.setVisible(true);
        label1.setHorizontalAlignment(SwingConstants.CENTER);  
//     /\
           if(tf_URL.getText().trim().equals("")){
             JOptionPane.showMessageDialog(null, "Escreva o endereço ");
				}  
			}       
		});	 
    }
 }

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

O único problema é que a imagem demora muito para carregar, e que não fica centralizada.
Mas tirando isso ta de boa.

Obrigado. ^^

mauricioadl

para deixar a imagem centralizada. vc pode usar layout null e colocar os valores da posicao do JLabel dae fica bonitinho.

Criado 24 de novembro de 2011
Ultima resposta 26 de nov. de 2011
Respostas 3
Participantes 2