【发布时间】:2014-04-08 07:49:13
【问题描述】:
我正在尝试制作一个 Java 桌面应用程序,我想在其中随机播放项目文件夹中的图像。我能够做到这一点,但我必须传递图片的名称,但我不想在我的代码中传递任何图片名称。我只想使用文件夹名称,它应该会自动从那里检索所有图像。
这是我的代码:
public class Main1 extends JFrame
{
private java.util.List<BufferedImage> list = new ArrayList<BufferedImage>();
private java.util.List<BufferedImage> shuffled;
private JLabel label = new JLabel();
private int width = 708;
private int height = 800;
private Timer timer = new Timer(4000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
update();
}
});
public Main1( )
{
super("Simple Timer");
{
getContentPane().setBackground(new java.awt.Color(153,153,0));
}
try {
list.add(resizeImage(ImageIO.read(new File("images\\1.jpg"))));
list.add(resizeImage(ImageIO.read(new File("images\\2.jpg"))));
list.add(resizeImage(ImageIO.read(new File("images\\3.jpg"))));
list.add(resizeImage(ImageIO.read(new File("images\\4.jpg"))));
} catch (IOException e) {
e.printStackTrace();
}
shuffled = new ArrayList<BufferedImage>(list);
Collections.shuffle(shuffled);
timer.start();
}
private BufferedImage resizeImage(BufferedImage originalImage) throws IOException {
BufferedImage resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, width, height, null);
g.dispose();
return resizedImage;
}
private void update() {
if (shuffled.isEmpty()) {
shuffled = new ArrayList<BufferedImage>(list);
Collections.shuffle(shuffled);
}
BufferedImage icon = shuffled.remove(0);
jLabel6.setIcon(new ImageIcon(icon));
}
【问题讨论】:
-
1) 为了尽快获得更好的帮助,请发布MCVE(最小完整且可验证的示例)。 2) 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。
-
list.add(resizeImage(ImageIO.read(new File("images\\1.jpg"))));在加载时立即调整图像大小并不是一个好主意。通常最好在显示时调整大小(如在渲染器中)或至少缓存原始图像以防查看区域需要更改。顺便说一句 - 为什么是 708x800 尺寸的图片?我没听说过这种纵横比。 -
@Andrew Thompson 这是因为我想在 jlable 大小上调整图像
标签: java swing list jlabel shuffle