Randomização de imagens em Java

Galera,

Estou com o seguinte problema que não consigo resolver por falta de conhecimento por ser novo em programação. Precisava usar Java para a solução.

Tenho um diretório xml com uma certa quantidade de imagens, tenho 1 painel com 3 JLabels que irão exibir essas imagens e ir trocando-as de forma randômica a cada 20 segundos. Uma imagem não pode aparecer duas vezes nesse painel, sempre tem de ser imagens distintas.

Como posso resolver esse problema? Alguem tem uma função de randomização como exemplo?!?
Proucurei alguns exemplos mais encontrei apenas randomização de números e nada relacionado a imagens.

Agradeço qualquer ajuda.

Obrigado!

Uma idéia seria associar cada imagem a um número e assim, quando o número for escolhido, você mostra a imagem.
Outra coisa que você irá precisar é de threads, para que a imagem fique mudando a cada 20 segundos.
Por último, você vai precisar fazer um controle manual para não deixar os números/imagens se repetir. Você pode por exemplo, ir armazeando dentro de uma List e verificar se ela já foi selecionada ou não.

Fla hugoam,

Seguinte, eu não sei como que vc vai recuperar essas imagens, creio que seja usando o objeto File do java, partindo deste ponto vc criaria uma List de Files e então poderia usar o método shuffle da classe Collections.

List<File> imagens = new ArrayList<File>();
// Recupera as imagens ...
Collections.shuffle(imagens);

[]s

Basicamente meu código busca as imagens dessa forma:
como eu poderia buscar aleatóriamente essas imagens?

// Implementando a Home.
public Home() throws IOException {
initComponents();
xml = new LeitorXMLDOM();
LeitorXMLDOM.carregar();
try {
a = xml.realizaLeituraXML(“Diretorio.xml”);

    } catch (ParserConfigurationException ex) {
        Logger.getLogger(Home.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SAXException ex) {
        Logger.getLogger(Home.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Home.class.getName()).log(Level.SEVERE, null, ex);
    }

    Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    setSize(screenSize);
    disparaRelogio();
    getDateTime();
    int i = 0;

   // JOptionPane.showMessageDialog(rootPane, a.size() + "");
    nomeProjeto = new JLabel[i];
    logo = new JLabel[i];

    for (i = 0; i < xml.a.size(); i++) {


        if (i == 0) {
            setaValor(legenda_projeto1, a.get(i).getDesc(), Logo_projeto1, a.get(i).getLogo());
        } else if (i == 1) {
            setaValor(legenda_projeto2, a.get(i).getDesc(), Logo_projeto2, a.get(i).getLogo());
        } else if (i == 2) {
            setaValor(legenda_projeto3, a.get(i).getDesc(), Logo_projeto3, a.get(i).getLogo());
        }
    }
    
}

public void setaValor(JLabel titulo, String texto, JLabel label, String icone) throws IOException {
    titulo.setText(texto);
   

    URL urlimagem = null;
    Image img = null;
    try {
        urlimagem = new URL(icone.replaceAll(" ", "%20"));

        try {
            img = ImageIO.read(urlimagem);
        } catch (IIOException e) {
        }
        label.setIcon(new ImageIcon(img));
    } catch (MalformedURLException ex) {
        trayBar.erroGenerico();
        Logger.getLogger(alertTelaInteira.class.getName()).log(Level.SEVERE, null, ex);
    }
}