[英]How to change automatically a Jlabel
嗨,我正在尝试创建一个Java桌面应用程序,该程序可以每5秒自动移动一次图像。 我能够做到这一点。 问题是我想使用自己的图像,并且希望将所有图像放在一个Jlabel上。 我做了下面的代码
我怎么能得到这个?
private static class ImagePanel extends JPanel {
URL[] urls;
ImageIcon[] image;
BufferedImage[] images;
Random rand = new Random();
JLabel imagelabel;
public ImagePanel() {
urls = new URL[4];
try {
urls[0] = new URL("http://i.stack.imgur.com/NCsHu.png");
urls[1] = new URL("http://i.stack.imgur.com/UvHN4.png");
urls[2] = new URL("http://i.stack.imgur.com/s89ON.png");
urls[3] = new URL("http://i.stack.imgur.com/QEK2o.png");
images = new BufferedImage[5];
images[0] = ImageIO.read(urls[0]);
images[1] = ImageIO.read(urls[1]);
images[2] = ImageIO.read(urls[2]);
images[3] = ImageIO.read(urls[3]);
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
setBackground(Color.BLACK);
Timer timer = new Timer(5000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
repaint();
}
});
timer.start();
}
private int random() {
int index = rand.nextInt(4);
return index;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
BufferedImage img = images[random()];
g.drawImage(img, 0, 0, 400, 400, 0, 0,
img.getWidth(), img.getHeight(), this);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
}
}
提前致谢
“但是问题是我想使用自己的图像,并且要将所有图像放在单个jlabel上。”
该程序似乎正在使用Web URL。 因此,我想您的问题就是如何使用自己的文件图像。
您应该做的是将图像放在项目的包中,例如
ProjectRoot
src
resources
image1.png
image2.png
然后,您可以使用以下内容替换URL
//urls[0] = new URL("http://i.stack.imgur.com/NCsHu.png");
urls[0] = ImagePanel.class.getResource("/resources/image1.png");
urls[1] = ImagePanel.class.getResource("/resources/image2.png");
在嵌入式资源 Wiki信息中查看更多信息,以了解有关如何使用嵌入式资源的更多信息。
该代码看起来很熟悉 ;-)
编辑
根据您的问题标题和有关JLabel
问题,代码实际上并不使用JLabel
。 它绘制图像。 如果确实要使用JLabel
,则可以使用imageLabel.setIcon(images[randon()])
更改标签图标。 您可以在Timer
侦听器中执行此操作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.