Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > duda con ArrayList de ImageIcon

hola buenas, estoy realizando un puzzle en java swing y tengo que añadir a 9 JButton 9 ImageIcon almacenadas en un ArrayList, el problema que tengo es al pasarle dichas imagenes a dichos botones deberia de eliminarme el indice del ImageIcon para no repetirse la misma imagen, ya que las imagenes no pueden estar repetidas (obviamente).
Os paso el codigo que tengo para daros una referencia, a ver si podeis solucionarmelo.
Gracias de antemano y un saludo!

CODIGO DEL ARRAYLIST:

private ArrayList<ImageIcon> imagenes1 = new ArrayList();

imagenes1.add(v.getIb11());
imagenes1.add(v.getIb11());
imagenes1.add(v.getIb12());
imagenes1.add(v.getIb13());
imagenes1.add(v.getIb14());
imagenes1.add(v.getIb15());
imagenes1.add(v.getIb16());
imagenes1.add(v.getIb17());
imagenes1.add(v.getIb18());
imagenes1.add(v.getIb19());

getIbXX(); son metodos que llaman a los distintos ImageICon los cuales tengo definidos en otra clase que llamo mediante el objeto v perteneciente a esa clase.

CARGA DE IMAGENES DEL ARRAYLIST EN LOS BOTONES:

int i = new Random().nextInt(imagenes1.size()); //creo un indice aleatorio para recorrer el ArrayList

for (i = 0; i

noviembre 20, 2014 | Unregistered Commenterdavid

salio cortado el ultimo codigo, aqui entero:

int i = new Random().nextInt(imagenes1.size()); //creo un indice aleatorio para recorrer el ArrayList

for (i = 0; i

noviembre 20, 2014 | Unregistered Commenterdavid

parece que no quiere salir...

int i = new Random().nextInt(imagenes1.size()); //creo un indice aleatorio para recorrer el ArrayList

for (i = 0; i < imagenes1.size(); i++) { //con este for recorro el arraylist

ImageIcon imagen = imagenes1.get(i); //saco la imagen asignada a ese indice
v.getBtn1().setIcon(imagen); //le asigno la imagen adquirida al primer boton
}
imagenes1.remove(i); //elimino el indice para que no se repita la imagen

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

ImageIcon imagen = imagenes1.get(i);
v.getBtn2().setIcon(imagen);
}
imagenes1.remove(i);

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

ImageIcon imagen = imagenes1.get(i);
v.getBtn3().setIcon(imagen);
}
imagenes1.remove(i);

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

ImageIcon imagen = imagenes1.get(i);
v.getBtn4().setIcon(imagen);
}
imagenes1.remove(i);

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

ImageIcon imagen = imagenes1.get(i);
v.getBtn5().setIcon(imagen);
}
imagenes1.remove(i);

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

ImageIcon imagen = imagenes1.get(i);
v.getBtn6().setIcon(imagen);
}
imagenes1.remove(i);

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

ImageIcon imagen = imagenes1.get(i);
v.getBtn7().setIcon(imagen);
}
imagenes1.remove(i);

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

ImageIcon imagen = imagenes1.get(i);
v.getBtn8().setIcon(imagen);
}
imagenes1.remove(i);

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

ImageIcon imagen = imagenes1.get(i);
v.getBtn9().setIcon(imagen);
}
imagenes1.remove(i);

noviembre 20, 2014 | Unregistered Commenterdavid

Si no he entendido mal, la cuestión es ordenar de manera aleatoria las imágenes de la lista, cada vez que se precisa agregarlas a los botones.

Si es el caso, lo más sencillo es:
1.- Crear una copia de la lista original
2.- Usar el método shuffle de la clase Collections.

List<ImageIcon> nuevaLista= new ArrayList<>(imagenes1);
Collections.shuffle(nuevaLista);

Las imágenes estarán "desordenadas" aleatoriamente en nuevaLista.
https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#shuffle(java.util.List)

noviembre 20, 2014 | Registered Commenterchoces

muchisimas gracias por tu respuesta, voy a probar :)

noviembre 20, 2014 | Unregistered Commenterdavid