gpt4 book ai didi

java - 如何按顺序随机播放图像?

转载 作者:行者123 更新时间:2023-11-30 03:58:01 29 4
gpt4 key购买 nike

我正在尝试制作Java桌面应用程序,我想在其中进行自动图像洗牌,我可以做到这一点,但问题是它没有洗牌我给的所有图像我想洗牌所有图像我怎样才能实现这个目标

这是我找到的一些代码 here :

/**
* @see https://stackoverflow.com/a/22423511/230513
* @see https://stackoverflow.com/a/12228640/230513
*/
public class ImageShuffle extends JPanel {

private List<Icon> list = new ArrayList<Icon>();

private JLabel label = new JLabel();
private Timer timer = new Timer(1000, new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
update();
}
});

public ImageShuffle() {
this.setLayout(new GridLayout(1, 0));

list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\e.jpg"));
list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\d.jpg"));
list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\yellow.png"));
list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\f.jpg"));
// list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\yellow.jpg"));
//label.setIcon(UIManager.getIcon("OptionPane.informationIcon"));

timer.start();
}

private void update() {

Random r=new Random();
int i1=(r.nextInt(3) +1);

label.setIcon(list.get(i1));
}

private void display() {
JFrame f = new JFrame("ImageShuffle");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.add(label);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
new ImageShuffle().display();
}
});
}
}

提前致谢

最佳答案

首先创建一个随机列表...

private List<Icon> list = new ArrayList<Icon>();
private List<Icon> shuffled;

//...

list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\e.jpg"));
list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\d.jpg"));
list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\yellow.png"));
list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\f.jpg"));

shuffled = new ArrayList<Icon>();
update();

每次计时器计时并调用 actionPerformed 时,都会弹出 shuffled 列表的第一个元素,直到什么都没有剩下...

 if (shuffled.isEmpty()) {
shuffled.addAll(list);
// Prevent the current image from been selected next...
shuffled.remove(label.getIcon());
Collections.shuffle(shuffled);
}

Icon icon = shuffled.remove(0);
label.setIcon(icon);

这将消除允许图像连续多次显示的可能性。无论如何,您的随机值计算应该更像 int i1 = (r.nextInt(list.size()));...

注释:

ImageShuffle 不需要从 JPanel 扩展,您无需向其中添加任何内容。这意味着您可以摆脱 this.setLayout(new GridLayout(1, 0));f.add(this); 并且程序仍应运行

关于java - 如何按顺序随机播放图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22626064/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com