2013-11-27 139 views
1

我在这里有一个简单的Java脚本,它不起作用。我有一个来自URL的图像数组。当我点击按钮时,我希望它改变。单击按钮时更改URL图像

import java.awt.BorderLayout; 
import java.awt.Image; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.net.URL; 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class ChangeURLImages 
{ 
public static void main(String[] args) 
{ 
    final String[] array = new String[]{"http://s3.amazonaws.com/37assets/svn/765-default-avatar.png", "http://indianraga.in/assets/default-bf4b832252a9579cf3408c88b2601a0e.jpg"}; 
    BufferedImage image = null; 
    try { 
     URL url = new URL(array[0]); 
     image = ImageIO.read(url); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    JFrame f = new JFrame(); 
    f.setVisible(true); 
    f.setSize(500, 600); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    final JLabel label = new JLabel(new ImageIcon(image)); 
    JButton change = new JButton("Change"); 

    JPanel p = new JPanel(new BorderLayout()); 

    p.add(change, BorderLayout.NORTH); 
    p.add(label, BorderLayout.CENTER); 

    f.add(p); 

    change.addActionListener (new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      URL url; 
      try { 
       url = new URL(array[1]); 
       BufferedImage image = ImageIO.read(url); 
       JLabel label = new JLabel(new ImageIcon(image)); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

     } 
    }); 

} 
} 

我试过并尝试过。不同的方式,但我无法做到这一点。

有人可以帮助我吗? 谢谢。

回答

3

您正在创建一个Label的新实例,并且无所作为。您必须更改容器内已有的标签。

label.setIcon(new ImageIcon(image));代替JLabel label = new JLabel(new ImageIcon(image));

1

在你的事件处理程序,创建一个新的JLabel,但从来没有得到显示新的JLabel因为你与它无关。它不会取代旧图像显示的旧JLabel。

更改行:

JLabel label = new JLabel(new ImageIcon(image)); 

在事件处理这样的:

label.setIcon(new ImageIcon(image)); 

这改变已经被显示在标签上的图标。

+0

它的工作原理。非常感谢你。 – onlize

+0

如果能帮助解决问题,请[接受](http://meta.stackexchange.com/a/65088/155831)。 *“你知道我该如何调整这些图片吗?”*“调整图片大小”对于“加载多个资源”是一个完全不同的问题 - 请在新问题上提问(搜索网站后等)。 –