单击按钮更改URL图像

时间:2013-11-27 16:00:51

标签: java image jframe

我这里有一个简单的Java脚本,它不起作用。我有一个包含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();
            }

        }
    });

}
}

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

有人可以帮我吗? 谢谢。

2 个答案:

答案 0 :(得分:3)

您正在创建Label的新实例,并且不执行任何操作。您必须更改容器内已有的标签。

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

答案 1 :(得分:1)

在事件处理程序中,您创建了一个新的JLabel,但是新的JLabel永远不会显示,因为您不对它执行任何操作。它不会替换旧图像显示的旧JLabel。

更改行:

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

在您的事件处理程序中:

label.setIcon(new ImageIcon(image)); 

这会更改已显示的标签上的图标。